한 줄에있는 단어 사이에 둘 이상의 공백이있는 항목을 검색하는 방법


109

한 줄에있는 단어 사이에 둘 이상의 공백이있는 항목을 검색하는 방법

1. this is a line containing  2 spaces
2. this is a line containing   3 spaces
3. this is a line containing multiple spaces first  second   three   four

위의 모든 것은이 정규식에 대해 유효한 일치입니다. 어떤 정규식을 사용해야합니까?


연속 된 공백 또는 해당 행의 모든 ​​공백을 확인하려고합니까?
Sachin Shanbhag

연속 공백은 모든 공백이 아님
Sam

1
"단어 사이"란 정확히 무엇을 의미합니까? 두 가지 예에서 단어와 숫자 사이에 여러 공백이 있습니다. 구두점은 어떻습니까 (예 : 점 뒤와 다음 단어 앞의 여러 공백을 일치 시키시겠습니까?)? 한 줄의 마지막 문자 앞 / 뒤의 공백은 어떻습니까? 탭도 일치 하시겠습니까? 공백으로 만 구성된 줄은 어떻습니까?
Tim Pietzcker

"포함과 2", "포함과 3", "첫 번째와 두 번째", "두 번째와 3"사이의 공백 ... 예, 점 뒤와 다음 단어 앞의 공백을 일치시키고 싶습니다.
Sam

답변:


180
[ ]{2,}

SPACE (2 이상)

해당 공백 단어가 뒤 따르는 앞뒤를 확인할 수도 있습니다. (탭이나 새 줄과 같은 다른 공백이 아님)

\w[ ]{2,}\w

동일하지만 교체와 같은 작업을위한 공간 만 선택 (캡처) 할 수도 있습니다.

\w([ ]{2,})\w

또는 공백 앞뒤에 단어 문자뿐만 아니라 공백이 있다는 것을 확인하십시오.

[^\s]([ ]{2,})[^\s]

1
\w'단어 문자', 즉 영숫자 및 밑줄을 의미하지만 다른 비 공백 문자는 의미하지 않습니다. 공백이 아닌지 확인하려면 \S(대문자 S)를 사용하십시오. 또한 첫 번째는 두 개 이상의 공백을 포함하고 다른 것은없는 줄만 일치시킵니다.
tdammers

나는 질문을 발전 시키려고 노력했다. 나는 당신이 말한 것을 놓쳤다는 것을 이해했습니다. 나는 \S그러한 기능을 위해 대소 문자를 사용하지 않는 것을 선호하며 읽기가 더 쉽습니다.
AlexanderMP

1
앵커를 사용하는 이유는 무엇입니까? 그는 라인 어딘가에 포함 된 공간을 찾고 있습니다.
Tim Pietzcker

특별한 이유가 없습니다. 처음에 나는 그것들이 필요하다고 생각했기 때문에 모든 과정을 따라 끌었습니다. 사실, 내가이 경우에 사용하는 것이 틀렸다는 것이 맞습니다. 바로 내 답변을 수정하겠습니다.
AlexanderMP

1
\w[ ]{2,}\w일치하지 word.<2 spaces>more words않거나 완전히 공백으로 구성된 문자열입니다. [^\s]([ ]{2,})[^\s]\w같은 공간 또는 문자열로 시작하는 라인에 실패합니다 bla<2 spaces>....
팀 Pietzcker에게

12

간단한 솔루션 :

/\s{2,}/

이것은 하나 이상의 공백 문자의 모든 발생과 일치합니다. 전체 행과 일치해야하지만 두 개 이상의 연속 된 공백 문자가 포함 된 경우에만 :

/^.*\s{2,}.*$/

공백이 연속적 일 필요가없는 경우 :

/^(.*\s.*){2,}$/

.*이 테스트 문자열의 끝에 도달하며, 필수 문자가있는 경우, 다음과하는 모두가 일치하지 않습니다 즉, 일반적으로 욕심이다. 일반적으로이 경우 다음 ?과 같이 추가하는 것이 좋습니다 .*?. 그것은 PHP의 PCRE 사용하여 나에게 무슨 일이 있었
AlexanderMP

일치합니다. "Greedy"는 패턴 전체를 일치시키면서 가능한 한 많이 일치 함을 의미합니다. 첫 번째 욕심쟁이 가 이미 전체 문자열과 일치 할 것으로 예상하더라도 /^.*b.*$/실제로 일치 합니다. "foobar".*
tdammers

9

이 정규식은 모든 공백을 선택합니다. 이것을 사용하고 단일 공백으로 바꿀 수 있습니다.

\s+

파이썬 예제

result = re.sub('\s+',' ', data))

4

검색 [ ]{2,} . 이렇게하면 줄 내에서 두 개 이상의 인접한 공간을 찾을 수 있습니다. 또한 선행 및 후행 공백과 완전히 공백으로 구성된 행과 일치합니다. 원하지 않으면 Alexander의 대답을 확인하십시오.

사실, 괄호는 생략 할 수 있습니다. 명료 함을위한 것입니다 (그렇지 않으면 반복되는 공백 문자가 잘 보이지 않습니다. :)).

문제는 \s{2,}그것은 또한 줄 바꿈에 의해 표시되는 Windows 파일에 줄 바꿈 (일치한다는 것입니다 CRLF거나 \r\n하는 일치를 \s{2}.

여러 개의 탭과 공백도 찾으려면을 사용하십시오 [ \t]{2,}.


more than one space between words in a line. [ ]{2,}단어 사이 는 어때? 질문을 읽어 보셨나요?
AlexanderMP

그렇기 때문에 OP가 실제로 작성하는 것만 큼 엄격하기를 원하는 경우 귀하의 답변을 참조했습니다. 그에게 물어봐야 할 것 같습니다.
Tim Pietzcker

2

여기 내 해결책이 있습니다.

[^0-9A-Z,\n]

이것은 모든 숫자, 쉼표 및 새 줄을 제거하지만 데이터 세트와 같은 중간 공백을 선택합니다.

  • 20171106,16632 ESCG0000018SB
  • 20171107,280 ESCG0000018SB
  • 20171106,70476 ESCG0000018SB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.