在C#
中,我想使用正则表达式来匹配任何这些词:
string keywords = "(shoes|shirt|pants)";
我想在内容字符串中找到整个单词。我认为regex
会这样做:
if (Regex.Match(content, keywords + "\\s+",
RegexOptions.Singleline | RegexOptions.IgnoreCase).Success)
{
//matched
}
但是对于像participants
这样的字词,它会返回true,即使我只想要整个单词pants
。
我如何仅匹配那些文字?
答案 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元序列在其上放置一个单词边界。