在C#
,我想使用正则表达式来匹配任何这些单词:
string keywords = "(shoes|shirt|pants)";
Run Code Online (Sandbox Code Playgroud)
我想在内容字符串中找到整个单词.我以为这样regex
做会:
if (Regex.Match(content, keywords + "\\s+",
RegexOptions.Singleline | RegexOptions.IgnoreCase).Success)
{
//matched
}
Run Code Online (Sandbox Code Playgroud)
但是对于像这样的单词participants
,它会返回true ,即使我只想要整个单词pants
.
我如何仅匹配那些文字?
Phi*_*ert 88
你应该在你的正则表达式中添加单词分隔符:
\b(shoes|shirt|pants)\b
Run Code Online (Sandbox Code Playgroud)
在代码中:
Regex.Match(content, @"\b(shoes|shirt|pants)\b");
Run Code Online (Sandbox Code Playgroud)
Ben*_*ngs 13
尝试
Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase)
Run Code Online (Sandbox Code Playgroud)
\b
字边界上的匹配.有关详细信息,请参见此处
您需要在任一侧使用零宽度断言,该单词之前或之后的字符不是该单词的一部分:
(?=(\W|^))(shoes|shirt|pants)(?!(\W|$))
Run Code Online (Sandbox Code Playgroud)
正如其他人所建议的那样,我认为 \ b将代替(?=(\ W | ^))和(?!(\ W | $)),即使单词位于输入字符串的开头或结尾,但我我不确定.