我真的想知道为什么以下代码返回1而不是2.任何线索?提前谢谢。
string report = "foo bar foo aloha hole hole foo cat gag weird gag strange tourist";
string name = "hole";
int count = Regex.Matches(report, @"(^|\s)" + Regex.Escape(name) + @"(\s|$)").Count;
Console.WriteLine("count is " + c);
答案 0 :(得分:1)
由于第一个匹配消耗了单词hole
周围的空格,因此无法匹配第二个hole
:
aloha hole hole foo
^ ^
您最好使用字边界\b
代替:
int count = Regex.Matches(report, @"\b" + Regex.Escape(name) + @"\b").Count;
答案 1 :(得分:1)
如果你只是想学习Regex
,那就冷静一下,不要理会。 p>
否则,Regex
对于使用其他方法(例如LINQ
)这么简单的事情来说是过度的:
var count = report.Split().Count(x => x == name);