使用Regex.Matches
我的印象是你会输入这样的东西:
private static int CheckForWordMatch(string offer, string item)
{
string pattern = @"\b(" + item + ")\b";
int count = 0;
count = Regex.Matches(@offer, pattern).Count;
return count;
}
测试参数:
offer = AK47HyperBeastFieldTested
item = AK47HyperBeastFieldTested
我正在寻找精确的单词匹配,以便如果该项目是“AK47HyperBeast”,它将不会返回匹配计数2.
我在这里做错了什么?
答案 0 :(得分:4)
您忘记使用第二个@)\b
的逐字字符串文字。您的")\b"
被视为)
和退格符。
string pattern = @"\b(?:" + item + @")\b";
string offer = "AK47HyperBeastFieldTested";
string item = "AK47HyperBeastFieldTested";
string pattern = @"\b(" + item + @")\b";
int count = Regex.Matches(offer, pattern).Count;
Console.WriteLine(count);
有人建议使用(^|\b)
和(\b|$)
- 这是多余的,因为\b
(字边界)已经在这些位置匹配。
如果您的item
可能以非单词字符开头或结尾,但仍需要整个单词匹配,请使用
string pattern = @"(?<!\w)(" + item + @")(?!\w)";
另外,请注意,如果您打算使用替换(例如\b(word|another)\b
),则只需要圆括号。如果您一次只测试一个单词,则可以安全地删除它们。
答案 1 :(得分:0)
\b
是您在offer
中没有的字边界。而是使用
string pattern = @"^\S*(" + item + @")\S*$";