2011-01-26 3 views

답변

1

다음 정규식은 각 값을 명명 된 그룹으로 추출합니다.

Word = "WORD" 
Column = "COLUMN" 
Anything = "Anything goes" 

이 정규 표현식을 실행하고 값을 얻을, 다음 (하지 않는 같은 것을 할 수 있습니다하려면 : 당신에게 다음 캡처를 제공해야합니다 샘플 문자열이 사용

(?<Word>(.*))(\s*)\[(?<Column>(.*))\]\s*%(?<Anything>(.*))% 

모범 사례로서, 단지 몇 가지 기본 개념을 설명하는 것입니다.)

Regex regex = new Regex(@"(?<Word>(.*))(\s*)\[(?<Column>(.*))\]\s*%(?<Anything>(.*))%"); 

Match match = regex.Match("WORD [COLUMN] %Anything goes%"); 

Console.WriteLine(match.Groups["Word"].Value); 
Console.WriteLine(match.Groups["Column"].Value); 
Console.WriteLine(match.Groups["Anything"].Value); 

이렇게하면 그룹 캡처가 콘솔에 출력됩니다. C#의 정규 표현식에 대한 자세한 내용은 Regex에 대한 MSDN 설명서를 확인하십시오 (이 경우 다른 유형도 나타날 수 있음). 또한 정규식을 작성하고 분석하는 데 도움이되는 도구로 Expresso을 사용하는 것이 좋습니다. Expresso는 코드 방출 및 기타 다양한 유용한 기능을 지원합니다.

+0

당신은 최고입니다! –

+0

이 첫 번째 부분은'(? (. *)) (\ s *)'와 "WORD [hello] % x %"(두 개의 공백이 있음) 입력시 캡처 된 단어에 0, 1 또는 2 공백이 포함될 수 있습니다.'. * '는 모두 일치하고'\ s * '는 일치가 필요하지 않으므로 당신은'(? [^ \ s] +) \ s +'로 더 나아지지는 않겠습니까? 이것은 백 트랙킹이 훨씬 덜한 것처럼 보입니다. 표현의 다른 두 부분에 대한 비슷한 코멘트 –

+0

@ 짐 : 내가 수행 한 모든 테스트에서 효과가 있습니다. 캡처는 욕심이 없습니다. 그러나 캡쳐가 제대로 작동하지 않는 것으로 판단되면 조정할 여지가 있습니다. –

3

이와 비슷한? 최초의 우주까지

먼저 잡아 모든 다음과 [과], 마지막으로 잡아 모든 사이의 모든 것을 잡아 %의

 
    ([^ ]*) \[([^\]])\] %(.*)% 
+0

COLUMN은 단지 한 문자 만 필요하기 때문에 작동하지 않을 것입니다 ('[^ \]] + '이 필요합니다.) 또한 마지막 부분은'% [^ %] * %'이어야합니다. 그는 "anything goes"안에 내장 된'% '문자를 허용합니다. –

1
([A-Z]+) \[([A-Z]+)\] %(.*)% 

단어와 패턴이 모두 대문자 인 경우.

관련 문제