2012-05-04 2 views
0

Есть ли вешать написать регулярное expresion в соответствии «с» или «C», чтобы работать для обоих примеров, какC# Regex соответствовать французский специальный символ

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

Для меня , следующий код возвращает истину в любом случае:

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 Я сомневаюсь, что в этом случае производительность больше беспокоит, чем читаемость, и таким образом я не представляю больше групп backreference, чем у исходной версии. – Superbest

Смежные вопросы