정규식을 사용하여 줄이 비어 있는지 확인하는 방법


154

줄이 비어 있는지 여부를 확인하는 간단한 정규식을 만들려고합니다.

케이스;

"    some"   // not blank
"   " //blank
"" // blank

여기서 공백은 의미하는 바를 의미합니다. 한 줄에 공백이 있거나 한 줄에 아무것도 없습니다. 아무것도 포함하지 않는 행을 일치 시키려면 '/ ^ $ /'를 사용하십시오.
Badri Gs

답변:


329

원하는 패턴은 여러 줄 모드에서 다음과 같습니다.

^\s*$

설명:

  • ^ 문자열 앵커의 시작입니다.
  • $ 문자열 앵커의 끝입니다.
  • \s 공백 문자 클래스입니다.
  • * 0 이상의 반복입니다.

여러 줄 모드 에서 줄의 시작과 끝 ^$도 일치합니다.

참고 문헌 :


비정규 대안 :

주어진 문자열 line이 "공백"인지 (즉 trim(), 공백 만 포함) 확인한 다음 결과 문자열을 확인하여 확인할 수도 isEmpty()있습니다.

Java에서는 다음과 같습니다.

if (line.trim().isEmpty()) {
    // line is "blank"
}

정규식 솔루션은 matches다음과 같이 앵커없이 단순화 할 수 있습니다 ( Java로 정의 된 방식 때문에 ).

if (line.matches("\\s*")) {
    // line is "blank"
}

API 참조


1
@Adnan : Marcelo의 답변에 Bart의 의견을 적어 둡니다. 여러 개의 빈 줄을 처리하는 방법에 따라 패턴이 약간 변경 될 수 있습니다.
polygenelubricants

글쎄, Java에서 파일을 한 줄씩 읽으므로 이것이 정상이라고 가정합니다.
Adnan

1
line.trim으로 훌륭하게 보입니다. : D
Adnan

1
우수한 코드는 이제 1.6 초에서> 1 초까지 실행됩니다. 감사합니다.
Adnan

파이썬에서 : if line.strip(): 빈 문자열이 평가되기 때문에False
John Mark

58

실제로 여러 줄 모드에서 더 정확한 대답은 다음과 같습니다.

/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

수락 된 답변 : ^\s*$마지막 줄이 비어있는 경우 (여러 줄 모드에서) 시나리오와 일치하지 않습니다.


정확히, 나는 이것이 사실임을 확인했다. 수락 된 대답은 내 파일에서 많은 빈 줄을 그리워했지만 모두 잡았습니다. 두 정규 표현식의 조합은 모든 경우를 포착합니다.
elmor

1
이 답변은 메모장 ++와 같은 도구에서 완벽하게 작동했습니다. 허용 된 답변은 여러 개의 빈 줄과 일치하지만 하나의 빈 줄은 일치하지 않습니다.
제임스

제 경우에는 수락 된 답변이 Sublime Text 3에서 작동하지 않으며 작동합니다.
양시 바이

1
수락 된 답변은 여러 경우에 제 경우에는 효과가있었습니다. 그렇습니다.
Robert Gabriel

1
이것이 가장 좋은 대답이어야합니다.
Q i


6

가장 휴대용 정규식 될 것이다 ^[ \t\n]*$(당신이 교체해야합니다 빈 문자열과 일치하도록 \t하고 \n그에 따라 탭과 줄 바꿈 포함) 및 [^ \n\t]공백이 아닌 문자열을 일치합니다.


나는 적어도 클래스와 함께 단일 공간을 바꿀 것입니다[ \t]
Bart Kiers

1
Windows \r에서는 정규식이되도록 캐리지 리턴 문자도 고려해야합니다 ^[ \t\r\n]*$. 그러나 ^\s*$더 좋습니다-더 간결합니다. 당신이 뉴 라인과 일치하지 않을 경우 사용할 수 있습니다 \h같이 (수평 공백을 의미)^\h*$
ps.pf

5

답변에 대한 bchr02의 전체 크레딧 . 그러나 빈 줄 이있는 (주석 끝) 행에 대한 시나리오를 잡기 위해 약간 수정해야했습니다 . 정규식이 비어 있지 않은 줄과와 일치했습니다 .*/*/

새로운: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

내가 한 것은 ^줄의 시작을 나타내는 두 번째 문자로 추가 하는 것입니다.


왜 bchr02의 답변에 대해 언급하고 그의 개선을 제안하지 않습니까?
adamlogan

1
@adamlogan yeah, 기억에서, 나는 당시에 그것을하고 싶었지만 다른 사람의 게시물에 대해 언급 할만 큼 평판이 충분하지 않았으므로 이렇게해야했습니다.
존 헨리

3

여기서 공백은 의미하는 바를 의미합니다.
한 줄에 공백이 있거나 한 줄에 아무것도 없습니다.
아무것도 포함하지 않는 행을 일치 시키려면 '/ ^ $ /'를 사용하십시오.


-1

글쎄 ... 내가 고민했다. (padpadd ++ 사용) 이것이 내가 찾은 해결책이다.

\ n \ s

줄 끝의 경우 \ n (일치하는 시작)-행의 시작 부분이 문자열이므로 캐럿은 도움이되지 않습니다. \ s 다음 문자열까지 공간을 차지합니다.

그것이 도움이되기를 바랍니다


OP는 정규식 답변을 원하며 줄 바꿈 문자가 아닙니다.
Moody_Mudskipper

사용자는 "줄이 비어 있는지 확인하는 간단한 정규식"을 요청합니다.이 정규식 (regexpal.com에서 테스트)은 정확히 그렇게합니다. 왜 테스트하지 않습니까?
M_TRONIC

테스트 벡터 인 R을 사용합니다 test_vec <- c(" some"," ",""). 귀하의 솔루션 : grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE, 투표 솔루션 : grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE. 투표 솔루션은 예상 결과를 제공하지만 그렇지 않습니다.
Moody_Mudskipper

내가 말했듯이 메모장 ++에서 이것을 사용했고 효과가있었습니다. 당신은하지 않았다. 그래서 우리는 동의하지 않을 수 있다고 생각합니다!
M_TRONIC

그래도 당신이하고있는 일이 확실하지 않습니다, 당신 ctrl+f은 notepad ++에서 하고 있습니까? 이 경우 "확장"검색 모드를 선택하고 '\ n \ s'를 검색하여 빈 줄을 찾을 수 있습니다 (실제로 일치하지는 않음). "정규 표현식"을 선택하면 문자열이 동일하게되어 @polygenelubricants의 솔루션을 사용해보십시오. 그것.
Moody_Mudskipper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.