C# Regex.Matches不应返回

C# Regex.Matches不应返回,c#,regex,C#,Regex,使用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

使用
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
是您在
中没有的词边界

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

\b
是您在
中没有的词边界,请使用

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

您忘记在第二个
@)\b
中使用逐字字符串文字。您的
”)\b“
被视为
和退格字符

string pattern = @"\b(?:" + item + @")\b";
:

有些人建议使用
(^ |\b)
(\b |$)
-这是多余的,因为
\b
(单词边界)已经在这些位置匹配

如果您的
项目
可能以非单词字符开头或结尾,但仍需要完整的单词匹配,请使用

string pattern = @"(?<!\w)(" + item + @")(?!\w)";

string pattern=@”(?您忘记将逐字字符串文字与第二个
@)\b
一起使用。您的
”\b“
被视为
和退格字符

string pattern = @"\b(?:" + item + @")\b";
:

有些人建议使用
(^ |\b)
(\b |$)
-这是多余的,因为
\b
(单词边界)已经在这些位置匹配

如果您的
项目
可能以非单词字符开头或结尾,但仍需要完整的单词匹配,请使用

string pattern = @"(?<!\w)(" + item + @")(?!\w)";

字符串模式=@”(?非常感谢您简洁明了的解释。另外,我实际上错过的只是一个
@
逐字字符串指示器!我已经清理了
字符串和
报价
字符串,只包含字母,感谢您提供更多信息。@MattGarnett:不客气,很容易伪造。@MattGarnettt关于连接字符串文字时的
@
符号。非常感谢您的清晰简洁的解释。另外,我实际上错过了一个
@
逐字字符串指示器!我已经清理了
字符串和
提供的
字符串,使其仅包含字母,感谢您提供的进一步信息MattGarnett:不客气,在连接字符串文字时,很容易忘记
@
符号。不,字符串的开头和结尾处的单词边界匹配。
\S
也是错误的,因为它匹配任何非空白字符。你的意思是
\S
?那也是错误的,因为超过espace被认为是一个单词边界。在C#中,你可以用
(?否,单词边界在字符串的开头和结尾处匹配。
\S
也不正确,因为它匹配任何非空白字符。您的意思是
\S
?这也不正确,因为超过空白被视为单词边界。。您可以用
(?不,单词边界在字符串的开头和结尾处匹配。
\S
也不正确,因为它匹配任何非空白字符。您的意思是
\S
?这也不正确,因为超过空白被视为单词边界。在C#中,您可以用
(?不,单词边界在字符串的开头和结尾处匹配。
\S
也不正确,因为它匹配任何非空白字符。您的意思是
\S
?这也不正确,因为不止一个空白被视为单词边界。。您可以用
模拟单词边界的开头。(?)?