[英]Regex.Match whole words
在C#
中,我想使用正則表達式來匹配以下任何單詞:
string keywords = "(shoes|shirt|pants)";
我想在內容字符串中找到整個單詞。 我認為這個regex
會這樣做:
if (Regex.Match(content, keywords + "\\s+",
RegexOptions.Singleline | RegexOptions.IgnoreCase).Success)
{
//matched
}
但它對於像participants
這樣的詞返回 true,即使我只想要整個詞pants
。
我如何只匹配那些字面意思?
您應該將單詞分隔符添加到您的正則表達式中:
\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|$))
正如其他人所建議的那樣,即使單詞位於輸入字符串的開頭或結尾,我認為\\b也可以代替(?=(\\W|^))和(?!(\\W|$))工作,但是我'不確定。
使用 \\b 元序列在其上放置單詞邊界。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.