정규식 : 공백 (탭 / 공백)을 찾지 만 개행은 찾지 못함


96

공백이나 탭을 테스트하지만 줄 바꿈이 아닌 정규식을 어떻게 가질 수 있습니까? 나는 시도 \s했지만 개행을 테스트한다는 것을 알았습니다.

C # / WPF를 사용하지만 중요하지 않습니다.

답변:


189

문자 클래스 사용 : [ \t]


1
내 문제를 확인하십시오. perl 전용 문자 클래스에 대해서는 stackoverflow.com/a/25956935/292060 을 참조하십시오 \h. 그러나 여기에 목록에 추가해야하는 경우 다른 많은 공백 문자가 있음을 보여줍니다.
goodeye

3
왜 전에 공백이 있어야 \t합니까?
Ooker

4
@Ooker 문자 공간을 캡처하려면
codemonkee

다른 답변에서 언급했듯이 다른 종류의 공백과 일치하지 않습니다.
Gus

1
\ t 앞에 공백이있는 이유는 무엇입니까?
Catbuilts

35

이 문자 세트를 시도하십시오.

[ \t]

이것은 공백 또는 표 작성 기와 만 일치합니다.


14

@ Eiríkr Útlendi가 언급했듯이 허용되는 솔루션은 가로 탭 (U + 0009)과 분리 공백 (U + 0020)이라는 두 개의 공백 문자 만 고려합니다. 구분하지 않는 공백 (내가 처리하려는 텍스트에 있음)과 같은 다른 공백 문자는 고려하지 않습니다. 더 완전한 공백 문자 목록은 Wikipedia에 포함 되어 있으며 링크 된 Perl 답변 에서도 참조됩니다 . 이러한 다른 문자를 설명하는 간단한 C # 솔루션은 문자 클래스 빼기를 사용하여 빌드 할 수 있습니다.

[\s-[\r\n]]

또는 Eiríkr Útlendi의 솔루션을 포함하면

[\s\u3000-[\r\n]]

3

참고 : CJK 텍스트 (중국어, 일본어 및 한국어)를 처리하는 경우 지금까지 시도한 구현 (Perl, .NET, PCRE, Python) 에 대해 더블 바이트 공간 (Unicode \u3000)이 포함 되지 않습니다 \s. 먼저 문자열을 정규화해야합니다 (예 : 모두 \u3000를 로 대체 \u0020). 또는 .NET과 같은 다른 공백과 함께이 코드 포인트를 포함하는 문자 세트를 사용해야합니다 [ \t\u3000].

Perl 또는 PCRE를 사용하는 \h경우 가로 공백에 대한 속기 사용 옵션이 있습니다. 여기에는 특히 1 바이트 공간, 2 바이트 공간 및 탭이 포함 된 것으로 보입니다. 자세한 내용은 공백 일치 (Perl) 스레드를 참조하십시오.

그러나이 \h속기는 .NET 및 C #에 대해 구현되지 않았습니다.


1
좋은 지적. Java \h(Java 8에 도입 됨)는을 포함 \u3000하지만 \sUNICODE_CHARACTER_CLASS 모드 (Java 7에 도입 됨)를 설정하지 않는 한 포함 하지 않습니다.
Alan Moore

0

코드 아래의 공간 을 바꾸고 싶다면 나를 위해 일했습니다.C#

Regex.Replace(Line,"\\\s","");

탭용

Regex.Replace(Line,"\\\s\\\s","");

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