2012-07-24 5 views
2

C#에서 일치와 점점 일치 똑같은 반면 정규식정규식 내가 C# .NET을 사용하여 다음 패턴과 일치하는 것을 시도하고

^([[a-z][A-Z]]*):([[a-z][A-Z][0-9],]*)$ 

샘플 문자열

Student:Tom,Jerry 

발견되지 루비에서 작동합니다 (Rubular을 사용하여 확인). 어떤 아이디어가 C#에서 작동하지 않는 이유는 무엇입니까?

코드 블록

public static KeyValuePair<string, IList<string>> Parse(string s) 
    { 
     var pattern = new Regex(@"(\w*):([\w\d,]*)"); 
     var matches = pattern.Matches(s); 
     if (matches.Count == 2) 
     { 
      return new KeyValuePair<string, IList<string>>(matches[0].Value, matches[1].Value.Split(',')); 
     } 

     throw new System.FormatException(); 
    } 
+0

정말 익숙하지 않은데, 어떤 상황에서 벗어날 필요가 있습니까? – Sturm

+1

범위가 잘못되어 있습니다. '^ ([a-zA-Z] *) : ([a-zA-Z0-9,] *) $' – hazzik

+1

[RegExr] (http://gskinner.com/RegExr /)는 이런 종류의 일에 좋은 도구입니다. 여기에 귀하의 [working] (http://regexr.com?31kih)과 [not working] (http://regexr.com?31kik)의 예가 있습니다. – RichardTowers

답변

9

약간 정규식을 변경해보십시오 : - 당신은 (밑줄 포함) 모든 단어 문자를 원하는 경우 다음 사용하지 않는 경우

([a-zA-Z]*):([a-zA-Z0-9,]*) 

당신도, 그것을 조금 더 단순화 할 수 위의 하나.

(\w*):([\w\d,]*) 

당신은 훨씬 더를 단순화 할 수와 같은 [[a-z][A-Z]]

+0

작동하지만 일치 항목을 호출하면 두 개의 일치 그룹을 예상하는 반면 일치 항목이 하나만 나타납니다 –

+0

@KrishnaswamySubramanian은 여전히 ​​동일한 테스트 문구를 사용하고 있습니까? 난 그냥 http://regexr.com?31kin에서 C#을 애플 리케이션에서 그것을 시도하고 완벽하게 나를 위해 작동합니다 :("사용하는 학생 : 톰, 제리"그것은 두 그룹 "학생"과 "톰, 제리"를 보여줍니다 –

+0

예!하지만 하나의 일치 항목 만 계속 표시합니다. var pattern = new 정규식 (@ "(\ w *) : pattern.matches ("Student : Tom, Jerry ") –

1

로 그룹 - 그룹 다중 할 필요가 없습니다 :

^([A-z]*):([\w,]*)$ 

첫 번째 그룹은 [a-zA-Z]에 해당하고 [a-zA-Z0-9] 두 번째입니다. 첫 번째 그룹이 숫자와 문자를 일치 시키길 원하면 \w을 간단히 사용할 수 있습니다.

관련 문제