正则表达式.匹配没有返回预期值

本文关键字:返回 正则表达式 | 更新日期: 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),则只需要圆括号。如果每次只测试一个单词,则可以安全地删除它们。

'boffer中没有的字边界,请使用

string pattern = @"^'S*(" + item + @")'S*$";