获取Regex.Matches以在位置0开始匹配

时间:2018-05-31 14:29:50

标签: c# regex

我正在尝试使用Regex来计算某个字符串出现在另一个以逗号分隔的字符串中的次数。

我正在使用Regex.Matches(comma-separated string, certain string).Count来获取该号码。我唯一的问题是,如果它在字符串的开头排成一行,我希望它只是算作一个匹配。

例如,如果我有逗号分隔的字符串

string comma_separated = "dog,cat,bird,blackdog,dog(1)"; 

并希望查看搜索字符串与逗号分隔字符串

的内容匹配的次数
string search = "dog";

我用:

int count = Regex.Matches(comma_separated, search).Count;

我希望它是2,因为它与

匹配

"的下,猫,鸟,blackdog,的(1)",

然而它返回3,因为它也与blackdog的狗部分匹配。

有没有什么办法可以让它只能在识别出一个从字符串开头开始的匹配时才算作匹配?或者我只是错误地使用正则表达式?

3 个答案:

答案 0 :(得分:3)

正如评论中所述,正则表达式可能不是您达到理想结果的最合理方式。但是,如果您想使用正则表达式来查找匹配项,那么这样的结果将提供您想要的结果

(?<=,|^)dog

这将带来一个积极的外观&#34;确保&#34; dog&#34;之前是逗号或位于您正在搜索的字符串的开头。

有关Regex中的外观的更多信息:https://www.regular-expressions.info/lookaround.html

答案 1 :(得分:1)

  string comma_separated = "dog,cat,bird,blackdog,dog(1)";
  int count = Regex.Matches(comma_separated, string.Format(@"\b{0}\b", Regex.Escape("dog")), RegexOptions.IgnoreCase).Count;

通过将 \ b 附加到文本的任意一侧,您可以找到&#34; EXACT&#34;在文本中匹配。

答案 2 :(得分:0)

尝试使用此模式:search = @"\bdog";\b匹配字边界。