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


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.