2010-12-26 19 views
6

Tôi có một vấn đề sau đây với biểu hiện thường xuyên của tôi, tôi muốn nó để phù hợp với sâu bướm trong chuỗi "Đây là một con sâu bướm s răng" nhưng nó phù hợp với mèo. Làm thế nào tôi có thể thay đổi nó?C# Regex để phù hợp với những lời từ danh sách

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

Trả lời

10

Bạn cần regex của biểu mẫu \b(abc|def)\b.
\b là dấu tách từ.

Ngoài ra, bạn cần gọi số Regex.Escape trên mỗi từ.

Ví dụ:

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

Cảm ơn, nhưng tại sao tôi cần 'Regex.Escape' nó hoạt động chỉ Wits '\ b's? –

+0

@user: Nếu chuỗi của bạn chứa một '\' thì sao? – SLaks

+0

phải là '\ b (abc | def) \ b' hoặc' \ b (abc | def \ b) '- ví dụ C# của bạn cho kết quả khác nhau, ví dụ của bạn ở dòng đầu tiên. – Gerwald

Các vấn đề liên quan