2011-02-17 4 views
1

다음 코드가 있습니다. 와일드 카드는 실제로 내가 원하는 것입니다. (최종 리팩터링 전에 나쁜 코드를 용서해주십시오).사이의 정규 표현식 반환

string findRegex = "{f:.*}"; 
Regex regex = new Regex(findRegex); 
foreach (Match match in regex.Matches(blockOfText)) 
{ 
    string findCapture = match.Captures[0].Value; 
    string between = findCapture.Replace("{f:", "").Replace("}", ""); 
} 

코드에 대해 좋아하지 않는 것은 내가 찾은 것 사이에있는 것을 얻으려는 것이고, 이중 대체 문입니다. 더 좋은 방법이 있습니까? 추가

가 : 여기 당신은 당신의 일치의 그룹 부분에 괄호를 사용하고 나중에 추출 할 수

Dear {f:FirstName} {f:LastName}, 

답변

2

샘플 문자열입니다

string findRegex = "{f:(.*?)}"; 
Regex regex = new Regex(findRegex); 
foreach (Match match in regex.Matches(blockOfText)) { 
    string between = match.Captures[1].Value; 
} 

를 정확하게 두 경기를하려면을 (예를 들어, 귀하의 첫 번째 이름 인 마지막 이름 예) 두 그룹을 만드십시오 :

string findRegex = "{f:(.*?)}.*?{f:(.*?)}"; 
Regex regex = new Regex(findRegex); 
foreach (Match match in regex.Matches(blockOfText)) { 
    string firstName = match.Captures[1].Value; 
    string lastName = match.Captures[2].Value; 
} 
+0

정규 표현식이 "Firstname} {f : 성"을 하나의 캡처로 캡처하는 것처럼 보입니다. 내 게시물에 예제를 추가했습니다. –

+1

@Valamas : 아, 욕심이 많지 않은 일치가 필요합니다. '. *?'. 내 게시물을 업데이트하고 있습니다. – Tim

+0

매일 성장하는 화이트 벨트 정규 표현 기술에 도움을 주셔서 감사합니다. –

1

그룹 사용 :

string findRegex = "{f:(.*)}"; 
Regex regex = new Regex(findRegex); 
foreach (Match match in regex.Matches(blockOfText)) 
{ 
    string findCapture = match.Groups[1].Value; 
    // ... rest 
} 
+0

정규 표현식이 "Firstname} {f : Lastname"을 하나의 캡처로 캡쳐하고있는 것처럼 보입니다. 내 게시물에 예제를 추가했습니다. –