Regex.Match整个单词

Kri*_*s B 48 .net c# regex

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)

  • 在末尾添加`, RegexOptions.IgnoreCase)` (3认同)

Ben*_*ngs 13

尝试

Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase)
Run Code Online (Sandbox Code Playgroud)

\b字边界上的匹配.有关详细信息,请参见此处


ric*_*ent 5

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

(?=(\W|^))(shoes|shirt|pants)(?!(\W|$))
Run Code Online (Sandbox Code Playgroud)

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

  • 您的模式比“\b”更好,因为后者不会采用例如以逗号结尾的关键字(“关键字,”),而这是预期的。另外,正确的模式是: (?<=\W|^)(keyword)(?=\W|$) (3认同)