2012-08-22 2 views
1

문자열에서 값을 캡처하는 데 문제가 있습니다. 나는 단지 T 또는 :을 붙잡고 싶지 않은 번호 만 원합니다. 이 실패 테스트는 다음과 같이 설명합니다 :정규 표현식 캡쳐

[TestMethod] 
public void RegExTest() 
{ 
    var rex = new Regex("^T([0-9]+):"); //as far as I understand, the() denote the capture group 
    var match = rex.Match("T12:abc"); 
    Assert.IsTrue(match.Success); 
    Assert.IsTrue(match.Groups[0].Success); 
    Assert.AreEqual("12", match.Groups[0].Captures[0]); //fails, actual is "T12:" 
} 
+0

같이해야한다. 당신의 정규 표현식은'^ (?: T) ([0-9] +) (? : \ :) $' –

+0

@AndreCalil이되어야합니다. 그래도 작동하려면'Groups [1] 결과. 감사. – weston

+0

첫 번째 그룹은 그룹 [1]입니다. 그룹 [0]은 전체 일치입니다. – Toto

답변

1

그룹 수집,
Groups[0] 인덱스 1에서 그룹을 캡처 나타내고 항상 전체 일치를 나타냅니다.
위의 Groups[0] 대신 Groups[1]을 입력해야합니다.

MatchGroups 속성은 는 하나의 경기 그룹을 캡처 표현한다 그룹 개체를 포함하는 GroupCollection 개체를 반환합니다. 컬렉션의 첫 번째 그룹 객체 (인덱스 0) 은 전체 일치를 나타냅니다. 다음에 나오는 각 개체는 단일 캡처 그룹의 결과를 나타냅니다 ( ).

The Group Collection

0

그룹 이름을 지정하여 얻습니다.

[TestMethod] 
public void RegExTest() 
{ 
    var rex = new Regex("^T(?<N>[0-9]+):"); 
    var match = rex.Match("T12:abc"); 
    Assert.IsTrue(match.Success); 
    Assert.IsTrue(match.Groups[0].Success); 
    Assert.AreEqual("12", match.Groups["N"].Value); 
} 

열심히 봤어야 : 제로 기반 How do I access named capturing groups in a .NET Regex?

+0

자, 질문에 대답 해 주신 것을 축하드립니다. 어쨌든 내 제안을 시도해 주시겠습니까? –

+0

@AndreCalil 나는 행동했고, 작동하지만, 단지 Group [1]을 접근하는 것으로 말했던 것처럼, 실제로 Kash가 표현을 변경하지 않고 작동한다고 지적했다. – weston

1

그래서 당신은 T사이의 숫자를 일치시킬 : 여기

은 정규식에 대해 그

@"(?<=T)\d+(?=:)"//no need of groups here 

에 대한 간단한 Regex입니다 :

,

정규식

^T([0-9]+): 

당신은 당신이 그것을 나타내야 캡처하지 않으려는 무엇이든 여기이

T(\d+)://^ is not needed and [0-9] can be represented as \d 

Group[0] would be T:12//a full match 
Group[1] would be 12//1st match within()i.e.1st() 
Group[2] would be //2nd match within()i.e 2nd() 
+0

감사합니다.'^'는 T가 문자열의 시작 부분에 있는지 확인하는 것입니다. 그래서 내가 필요하지 않니? – weston

+0

아니요. 그럴 필요가 없습니다 ... '^'다음에 문자열 ** sddsT55 : ** '^'는 구걸시 T를 원하기 때문에 일치하지 않습니다. 문자열 ** T55 : **는'^'와 일치하지만 ** sddsT55와는 일치하지 않을 것입니다 : ** – Anirudha

+0

@weston 만약'string'이 항상'T54 :'라고 확신한다면'^'을 사용해야합니다. – Anirudha