正则expression式。匹配整个单词
在C#
,我想使用一个正则expression式来匹配这些单词中的任何一个:
string keywords = "(shoes|shirt|pants)";
我想在内容string中find整个单词。 我认为这个regex
会这样做:
if (Regex.Match(content, keywords + "\\s+", RegexOptions.Singleline | RegexOptions.IgnoreCase).Success) { //matched }
但是对于participants
这样的单词来说,即使我只想要整个单词pants
。
我怎样才能匹配那些文字?
你应该添加分隔符到你的正则expression式:
\b(shoes|shirt|pants)\b
在代码中:
Regex.Match(content, @"\b(shoes|shirt|pants)\b");
尝试
Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase)
\b
匹配单词边界。 在这里看到更多的细节。
你需要一个零宽度的断言,在这个单词之前或之后的字符不是单词的一部分:
(?=(\W|^))(shoes|shirt|pants)(?!(\W|$))
正如其他人所build议的那样,我认为 \ b即使在inputstring的开始或结尾处,也会工作而不是(?=(\ W | ^))和(?!(\ W | $)) ,我不确定。
用\ b metasequence在它上面放置一个字边界。