正则表达式.匹配没有返回预期值
本文关键字:返回 正则表达式 | 更新日期: 2023-09-27 18:18:28
使用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。
我在这里做错了什么?
您忘记对第二个@)'b
使用逐字字符串文字。您的")'b"
被视为)
和退格字符。
string pattern = @"'b(?:" + item + @")'b";
参见c# demo:
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
),则只需要圆括号。如果每次只测试一个单词,则可以安全地删除它们。
'b
是offer
中没有的字边界,请使用
string pattern = @"^'S*(" + item + @")'S*$";