问与答 C#-正则表达式匹配整个单词

patton · 2020-03-07 20:37:46 · 热度: 280

participants中,我想使用正则表达式来匹配以下任何一个单词:

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

我想在内容字符串中找到整个单词。 我认为这participants可以做到:

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

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

我该如何只匹配那些文字呢?

共收到 4 条回复
vien #1 · 2020-03-07 20:37:47

您应该在正则表达式中添加定界符:

\b(shoes|shirt|pants)\b

在代码中:

Regex.Match(content, @"\b(shoes|shirt|pants)\b");
lukas #2 · 2020-03-07 20:37:48

尝试

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

\b在单词边界上匹配。 有关更多详细信息,请参见此处。

tampe #3 · 2020-03-07 20:37:50

您需要在两边使用零宽度断言来确定单词前后的字符都不是单词的一部分:

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

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

claude #4 · 2020-03-07 20:37:51

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册