2009-09-09 4 views
2

나는 다음과 같은 정규 표현식이 있습니다왜이 정규 표현식이 공백과 일치하지 않습니까?

([0-9]+),'(.)':([0-9]+),(L|R|'.') 

그것은이 잘 일치를 : 나는 공간 를 교체 할 경우,

1,'a':1,R 

그러나 실패

1,' ':1,R 

이유가 없습니다 .과 일치합니까? 문자로 분류되지 않은 공간입니까? \ s은 탭 및 줄 바꿈과 일치하지 않기 때문에 사용할 수 없습니다.

([0-9]+),'(.|)':([0-9]+),(L|R|'.') 

그러나 그것은 작동하지 않습니다, 중 (나는 IgnorePatternWhitespace가 활성화되지 않음) : 나는 또한 시도했다.

답변

1

난 당신이보고있는 것을 재현 할 수

using System; 
using System.Text.RegularExpressions; 

class Test 
{ 
    static void Main() 
    { 
     Regex regex = new Regex("([0-9]+),'(.)':([0-9]+),(L|R|'.')"); 
     Console.WriteLine(regex.IsMatch("1,' ':1,R")); 
    } 
} 

인쇄 "참".

따옴표 사이에 다른 문자가있을 수도 있습니까? 일부 비 인쇄 문자? 본문은 어디에서 오는가?

당신은로 변경합니다 수 :

([0-9]+),'([^']+)':([0-9]+),(L|R|'.') 

은 그래서 따옴표 사이에 하나 이상의 문자와 일치 할 수있다.

+0

코드가 잘 작동합니다. 심지어 문자열을 복사하여 붙여 넣을 때 심지어 내 자신의 코드에서 일치하는 문자열과 일치 할 때도 일치합니다.이 코드는 비 인쇄 문자 이론을 배제합니다. 그러나 내 프로그램은 여전히 ​​실패합니다. 유일한 차이점은 내가 match를 검사하고 있다는 겁니다. regex를 호출 한 후 성공합니다. regex를 호출하기보다는 일치합니다. 일치합니다. 그것과 관련이있을 수 있습니까? 두 번째 제안에 대해서는 한 글자 만 허용되어야합니다. –

+0

절대로, 문제를 발견했습니다. 나는 그것이 정규 표현식과 일치하기 전에 각 줄에서 모든 공백을 제거하는 결국 다른 코드에서 if 문을 엉망으로 만들었다. 작은 따옴표 밖에있는 공백을 제거하기 위해 그것을 변경했습니다. 이제는 작동합니다. 그러나 인쇄되지 않는 문자를 확인하는 것이 다른 경우에 좋은 제안이기 때문에 이것을 답변으로 표시하겠습니다. –

0

.NET에서 시도하지는 않았지만 도트는 언어와 구현에 따라 다릅니다. 시도 : 단일 공백 ​​문자와 일치 할

([0-9]+),'([.| ])':([0-9]+),(L|R|'.') 
0

사용 0x0020 \.

관련 문제