使用Regex.Matches对字符串中的特定单词进行计数时出错
本文关键字:单词进 出错 Matches Regex 字符串 使用 | 更新日期: 2023-09-27 18:10:35
我试图找到一种方法来计数字符串中的特定单词,我发现了这个。
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.", "(");
其他情况似乎工作良好,但我需要计数"("。
第一个实例(.
)使用一个特殊字符,该字符在正则表达式中具有不同的含义。它匹配你所有的字符;因此你得到的结果是18。
要匹配实际的"。"字符,您需要对其进行"转义",以便将其视为句号而不是特殊字符。
MatchCollection matches = Regex.Matches("hi, hi, everybody.", "'.");
对于(
字符也是如此。它是一个特殊字符,在正则表达式中有不同的含义,您需要转义它。
MatchCollection matches = Regex.Matches("hi( hi( everybody.", "'(");
看起来你是正则表达式的新手,所以我建议你阅读,我上面发布的链接是一个很好的开始。
然而!
如果你只是想计算字符串中的出现次数,你不需要regex。
如何计算字符串中字符串的出现次数?
如果你使用的是。net 3.5,你可以使用LINQ:
在一行代码中完成此操作。int cnt = source.Count(f => f == '(');
如果你不想使用LINQ,你可以这样做:
int cnt = source.Split('(').Length - 1;
第二个参数表示一个模式,不一定只是要在字符串中搜索的字符,并且(
本身是一个无效的模式。
您不需要Regex来计算字符的出现次数。只要使用LINQ的Count()
:
var input = "hi( hi( everybody.";
var occurrences = input.Count(x => x == '('); // 2
(
字符是一个特殊的字符,表示组的开始。如果需要使用(
作为文字,则需要使用'(
进行转义。这应该能解决你的问题。