2010-12-26 2 views
6

У меня есть следующая проблема с моим регулярным выражением, я хотел бы, чтобы соответствовать гусеницу в строке «Это гусеница сек зуб» но он соответствует кошки. Как я могу его изменить?C# Regex чтобы соответствовать слова из списка

 List<string> women = new List<string>() 
     { 
      "cat","caterpillar","tooth" 
     }; 

     Regex rgx = new Regex(string.Join("|",women.ToArray())); 


     MatchCollection mCol = rgx.Matches("This is a caterpillar s tooth"); 
     foreach (Match m in mCol) 
     { 
      //Displays 'cat' and 'tooth' - instead of 'caterpillar' and 'tooth' 
      Console.WriteLine(m); 
     } 

ответ

10

Вам нужно регулярное выражение формы \b(abc|def)\b.
\b является разделителем слов.

Кроме того, для каждого слова необходимо набрать Regex.Escape.

Например:

new Regex(@"\b(" + string.Join("|", women.Select(Regex.Escape).ToArray()) + @"\b)"); 
+0

Спасибо, но почему мне нужно 'Regex.Escape' это работает только остроумие' \ b's? –

+0

@user: Что, если ваша одна из ваших строк содержит '\'? – SLaks

+0

должно быть '\ b (abc | def) \ b' или' \ b (abc | def \ b) '- ваши примеры C# дают другой результат, чем ваш пример в первой строке. – Gerwald

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