2012-05-04 2 views
0

는 "C"또는 "C"나를 위해C# 정규식은

var a = "ca va"; 
var b = "ça va"; 
Regex.Match(a,"\b(ca\sva)").Success // Match 
Regex.Match(b,"\b(ça\sva)").Success // Dont match 

감사

+1

코드가 올바르게 작동합니다 (컴파일 오류를 방지하기 위해'@'를 추가 한 후) –

+0

2 개가 있습니다. 그리고 정규 표현식에서 문자열 상수 앞에 @ 기호가 없습니다. – empi

+0

@ L.B .: 컴파일 오류가 아닙니다. '@'가 없으면'\ b'는 "백 스페이스 문자와 일치"를 의미합니다. –

답변

2

을 같은 두 예제에 대한 작업과 일치하는 정규식 포함을 작성하는있는 posibility이 있습니까 프랑스 특수 문자와 일치 다음 코드는 어느 경우에 true를 돌려 :

using System; 
using System.Text.RegularExpressions; 

namespace FrenchRegex 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var a = "ca va"; 
      var b = "ça va"; 

      var regex = @"\b((c|ç)a\sva)"; 

      var matchA = Regex.Match(a, regex).Success; 
      var matchB = Regex.Match(b, regex).Success; 

      Console.WriteLine("Matches '" + a + "': " + matchA); 
      Console.WriteLine("Matches '" + b + "': " + matchB); 

      Console.ReadKey(); 
     } 
    } 
} 

나는 복사 VS2010에 붙여 넣기, 그래서 당신은 내 결과를 재현하기 위해 동일한 작업을 수행해야 할 수도 있습니다.

어쨌든 "ça va"와 "ca va"를 모두 일치시키는 정규식은 \b([cç]a\sva)이 될 것이라고 생각합니다.

+0

또는 더 나은 [ "[cç] a va"'. – user7116

+0

그게 더 나아 졌는지 모르겠습니다. 후드에서 정규식 파서가 어떻게 작동하는지 잘 모르겠지만 문자 클래스 ([])는 소량이라 할지라도 파이프로 구분 된 리터럴 그룹보다 많은 오버 헤드가 필요하다고 생각합니다. –

+0

맞아, 고마워! @BrianWarshaw이 경우 퍼포먼스가 가독성보다 더 중요한 것은 아닌지, 원래 버전보다 더 많은 역 참조 그룹을 소개하지 않는다. – Superbest