正则表达式。匹配整个单词

Posted

技术标签:

【中文标题】正则表达式。匹配整个单词【英文标题】:Regex.Match whole words 【发布时间】:2010-11-15 14:15:58 【问题描述】:

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

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

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

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

    //matched

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

我如何只匹配那些字面意思?

【问题讨论】:

【参考方案1】:

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

\b(shoes|shirt|pants)\b

在代码中:

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

【讨论】:

你会怎么做但是忽略大小写 在末尾添加, RegexOptions.IgnoreCase) 注意括号在这种情况下是可选的,删除它们会简化结果【参考方案2】:

试试

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

\b 匹配单词边界。详情请见here。

【讨论】:

【参考方案3】:

你需要一个零宽度断言在单词之前或之后的字符不是单词的一部分:

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

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

【讨论】:

您的模式比使用“\b”要好,因为后者不会采用例如以逗号(“keyword”)结尾的关键字,而这是意料之中的。此外,正确的模式是: (? 【参考方案4】:

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

【讨论】:

这确实提供了答案,尽管不是正则表达式。

以上是关于正则表达式。匹配整个单词的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 匹配整个字符串,除非 [重复]

正则表达式整个单词[重复]

使用正则表达式匹配多个逗号分隔的单词

php正则表达式

正则表达式不区分大小写搜索带有变量的整个单词

正则表达式