2010-12-26 13 views
6

Mam następujący problem z moim wyrażenia regularnego, chciałbym go dopasować gąsienica w ciągu „To gąsienica s ząb” ale pasuje kota. Jak mogę to zmienić?C# Regex dopasować słowa z listy

 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); 
     } 

Odpowiedz

10

Potrzebujesz wyrównania formularza \b(abc|def)\b.
\b to separator wyrazów.

Należy również wywołać Regex.Escape dla każdego słowa.

Na przykład:

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

Dzięki, ale dlaczego muszę 'Regex.Escape' współpracuje tylko rozum' \ b's? –

+0

@user: A co jeśli twój ciąg zawiera "\"? – SLaks

+0

powinno być '\ b (abc | def) \ b' lub' \ b (abc | def \ b) '- twoje przykłady C# dają inny wynik, niż twój przykład w pierwszym wierszu. – Gerwald

Powiązane problemy