Regex.Match整个单词

时间:2009-07-30 20:11:52

标签: c# .net regex

C#中,我想使用正则表达式来匹配任何这些词:

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

我想在内容字符串中找到整个单词。我认为regex会这样做:

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

但是对于像participants这样的字词,它会返回true,即使我只想要整个单词pants

我如何仅匹配那些文字?

4 个答案:

答案 0 :(得分:83)

您应该在正则表达式中添加单词分隔符:

\b(shoes|shirt|pants)\b

在代码中:

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

答案 1 :(得分:13)

尝试

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

\b匹配字边界。有关详细信息,请参阅here

答案 2 :(得分:5)

您需要在任一侧使用零宽度断言,该字词之前或之后的字符不是该字词的一部分:

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

正如其他人所说,我认为 \ b 将取代(?=(\ W | ^)) (?!(\ W | $))即使单词位于输入字符串的开头或结尾,但我不确定。

答案 3 :(得分:1)

使用\ b元序列在其上放置一个单词边界。