2011-04-07 3 views
3

구성 가능한 정규 표현식 목록을 사용하여 입력 텍스트를 변환하는 .NET 텍스트 형식 구성 요소를 작성합니다. 정규식 규칙을 사용하여 대/소문자 변환을 허용해야하지만 .NET에서이 작업을 수행하는 방법을 파악할 수는 없습니다. s/(\ b) ([a-z])/\ 1 \ u \ 2/g와 같은 perl 스타일의 대체 표현식은 트릭을 수행하지만 .NET은이를 지원하지 않습니다. 대리자와 함께 MatchEvaluator를 사용할 수 있다는 것을 알고 있지만 구성 규칙 (텍스트)을 사용하려면 대체 규칙이 필요합니다..NET에서 perl 스타일 대체 표현식을 사용하는 방법

도움을 주시면 감사하겠습니다. 그들이 괜찮 혼합

Console.WriteLine(regex.Replace("moon:glow", "$2:$1")); 

:

답변

3

가장 .NET 스타일의 방법은

var regex = new Regex(@"^(?<first>.*?):(?<second>.*)$", RegexOptions.Compiled); 
Console.WriteLine(regex.Replace("moon:glow", "${second}:${first}")); 

glow:moon 

당신은 또한 이렇게 같은 서수 참조를 사용할 수 있습니다 인쇄 할 것 . 반면

은 개별적 예컨대 :

var regex = new Regex(@"^((?<token>.*?):)*", RegexOptions.Compiled); 
foreach (Capture token in regex 
     .Match("moon:glow:is:the most:beautiful:thing") 
     .Groups["token"].Captures) 
    Console.WriteLine(token.Value); 

출력

moon 
glow 
is 
the most 
beautiful 

정교 일치의 평가를 얻으려면, 당신이 할 것, 예를 들어 같은 반복 원자에 대한 모든 일치하는 값을 검색 할 수 있습니다 펄

var upper = Regex.Replace("moon:glow:is:the most:beautiful:thing", "(.*?)(:|$)",     
    m => m.Groups[1].Value.ToUpper() + m.Groups[2]); 
Console.WriteLine(upper); 

불행하게도, 난 단지 (I 모노로 볼 수 있습니다 알고있는 서비스로 컴파일러를 사용하는 경우를 제외하고는 텍스트와 같은 평가 기능을 구성 할 쉬운 방법을 볼 수 없지만, 나는 MS에 아주 확실하지 않다. Net 아직 없음)

+0

OP는이를 앱에서 사용자 정의 된 대체 정의를 수락하는 일반적인 방법으로 어떻게 변환해야합니까? 귀하의 예는 전환을 수행합니다. 그의 모범은 사례를 수정합니다. –

+0

실종. 추가 된 – sehe

+0

+1 OP와 마찬가지로 C# RegEx가 수행 할 대체의 일반 사양에 대한 사용자 인터페이스를 제공하는 것이 쉽지 않다고 생각합니다. –

관련 문제