我试图找到一种方法来计算字符串中的特定单词,我发现了这一点。
using System.Text.RegularExpressions;
MatchCollection matches = Regex.Matches("hi, hi, everybody.", ",");
int cnt = matches.Count;
Console.WriteLine(cnt);
工作正常,结果显示2。 但是,当我将“,”改为“。”时,它显示18,而不是预期的1.为什么?
MatchCollection matches = Regex.Matches("hi, hi, everybody.", ".");
当我将“,”更改为“(”时,它显示错误! 错误如下:
SYSTEM.ARGUMENTEXCEPTION - THERE ARE TOO MANY (...
我不明白为什么会发生这种情况
MatchCollection matches = Regex.Matches("hi( hi( everybody.", "(");
其他情况似乎工作正常,但我需要计算“(”。
答案 0 :(得分:2)
使用.
的第一个实例使用的是一个特殊字符,它在正则表达式中具有不同的含义。它匹配你拥有的所有角色;因此你得到18的结果。
http://www.regular-expressions.info/dot.html
匹配实际的"。"性格,你需要"逃避"这样它就被视为一个完整的而不是一个特殊的角色。
MatchCollection matches = Regex.Matches("hi, hi, everybody.", "\.");
(
字符也存在相同的情况。它是一个特殊的角色,在正则表达式方面具有不同的含义,你需要逃避它。
MatchCollection matches = Regex.Matches("hi( hi( everybody.", "\(");
看起来你对正则表达式不熟悉,所以我建议阅读,我上面发布的链接是一个好的开始。
无论其!
如果您只想计算一个字符串中的ocncences,那么您就不需要正则表达式。
How would you count occurrences of a string within a string?
如果您使用的是.NET 3.5,可以使用LINQ在单行中执行此操作:
int cnt = source.Count(f => f == '(');
如果您不想使用LINQ,可以使用:
int cnt = source.Split('(').Length - 1;
答案 1 :(得分:1)
第二个参数表示一个模式,不一定只是要在字符串中搜索的字符,而(
本身就是一个无效的模式。
您不需要正则表达式来计算字符的出现次数。只需使用LINQ的Count()
:
var input = "hi( hi( everybody.";
var occurrences = input.Count(x => x == '('); // 2
答案 2 :(得分:1)
(
字符是一个特殊字符,表示group的开头。如果您需要使用(
作为文字,则需要使用\(
将其转义。这应该可以解决你的问题。