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
?这也不正确,因为不止一个空白被视为单词边界。。您可以用模拟单词边界的开头。(?)?