2009-07-30 101 views
41

C#,我想用正則表達式匹配任何的這些話:Regex.Match整個單詞

string keywords = "(shoes|shirt|pants)"; 

我想找到的內容串整個單詞。我認爲這regex會這麼做:

if (Regex.Match(content, keywords + "\\s+", 
    RegexOptions.Singleline | RegexOptions.IgnoreCase).Success) 
{ 
    //matched 
} 

但它返回像participants的話屬實,即使我只是想整個單詞pants

如何只匹配那些文字的話呢?

回答

72

你應該單詞分隔符添加到您的正則表達式:

\b(shoes|shirt|pants)\b 

在代碼:

Regex.Match(content, @"\b(shoes|shirt|pants)\b"); 
1

使用\ b元序列把一個單詞邊界上。

+3

這並不提供答案,儘管不是正則表達式表達。 – escist 2013-03-21 05:25:35

4

您需要在兩側零寬度斷言之前或單詞後面的字符不是單詞的一部分:

(?=(\W|^))(shoes|shirt|pants)(?!(\W|$)) 

正如其他人的建議,我認爲\ b將工作而不是(=(\ W |?^))((\ W |!$)),即使這個詞的開頭或輸入字符串的結束,但我不知道。

+0

你的模式比用「\ b」的更好,因爲後者不會採取關鍵字,例如,結束與一個逗號(「關鍵字」),而將預期。此外,正確的模式是:(?<= \ W | ^)(關鍵字)(?= \ W | $) – 2015-05-19 11:27:17

13

嘗試

Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase) 

\b在字邊界匹配。有關更多詳細信息,請參閱here