正则表达式。匹配整个单词
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 元序列在其上放置一个单词边界。
【讨论】:
这确实提供了答案,尽管不是正则表达式。以上是关于正则表达式。匹配整个单词的主要内容,如果未能解决你的问题,请参考以下文章