使用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.", "(");

其他情况似乎工作良好,但我需要计数"("。

使用Regex.Matches对字符串中的特定单词进行计数时出错

第一个实例(.)使用一个特殊字符,该字符在正则表达式中具有不同的含义。它匹配你所有的字符;因此你得到的结果是18。

http://www.regular-expressions.info/dot.html

要匹配实际的"。"字符,您需要对其进行"转义",以便将其视为句号而不是特殊字符。

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

(字符是一个特殊的字符,表示组的开始。如果需要使用(作为文字,则需要使用'(进行转义。这应该能解决你的问题。