2011-05-12 2 views
2

다음 문자열 예제를 사용하면 필요한 모든 문자열 인스턴스를 추출하는 데 사용해야하는 패턴은 무엇입니까? 그래서, 촬영 :정규 표현식에서 C#의 Regex와 패턴을 일치시키는 방법은 무엇입니까?

string Text = @"Dear {Customer.Name}, 
       Lorem ipsum dolor sit amet, {Customer.FirstName}"; 

그리고는 {Customer.Name}{Customer.FirstName}를 추출? 보너스로 {}을 추출 중에 제거 할 수 있습니까?

저는 LinqPad로 파고 들었습니다. 지금까지 new Regex("{[A-Za-z0-9.]+}", RegexOptions.Multiline).Match(Text)이 있는데, 첫 번째 부분 문자열 인 {Customer.Name} 만 일치합니다.

저는 정규 표현식에 매우 어려움을 겪었으므로 자세한 도움이 필요합니다.

미리 감사드립니다.

답변

7

정규식이 정상적으로 보입니다. 유일한 문제는 입력 문자열에서 모든 일치 항목을 얻으려면 Match 대신 Matches으로 전화해야한다는 것입니다. 당신은 추가 처리 만 하위 그룹 사용 후 하위 그룹의 결과로 갖고 싶어하고 부품 넣을 수 있습니다

:

var matches = Regex.Matches(Text, "{([A-Za-z0-9.]+)}", RegexOptions.Multiline); 
foreach(Match match in matches) 
{ 
    var variable = match.Groups[1].Value; 
} 
+0

정적'Regex.Matches' 메서드를 사용할 때마다 매회 새로운 것을 생성하는 대신 정규식을 캐시하기 때문에 더 멋지다. (당신은 Regex 객체를 전달할 수 있지만 성가시다.) – porges

+1

@Porges : 정보를 제공해 주셔서 감사합니다! 샘플 코드를 변경했습니다. –

+0

lol,'Matches' 부분은 얼굴에 자신을 때리는 것 중 하나이며 어떻게 그리울 수 있겠는가? 나는 그것이 정규 표현식에 얼마나 학대가 없는지를 보여줄 것이라고 생각합니다 ... 어쨌든, 예를 들어 주셔서 감사 드리며 LinqPad에서 시도해 보았습니다. 다시 한 번 감사드립니다! – Gup3rSuR4c

2

솔루션 앞서보고 뒤에보고를 필요는 사용하지합니다 그룹 ..

(?<={)[^}]*(?=}) 
+0

나에게 잔인한 것 같은데. –

+0

그러나 코드 유지 관리 관점에서 보면 재미 있습니다. – ChrisWue

+0

+1 나는 주위를 둘러보고 싶다. – stema

관련 문제