You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#统计字符串中*符号数量时遇ArgumentException异常问题

解决正则匹配*时的ArgumentException异常

嘿,这个问题我太熟悉了!你遇到的ArgumentException根本原因是正则表达式中的*是特殊元字符——它的作用是匹配前面的元素零次或多次,但你单独写*的时候,正则引擎完全不知道你要重复什么内容,自然就抛出语法错误的异常了。

几种可行的解决方案:

1. 手动转义特殊字符

在正则里,要匹配字面意义的*,需要在它前面加反斜杠\转义。而在C#字符串中,反斜杠本身也是转义字符,所以可以用逐字字符串(加@前缀)来避免二次转义:

string abc = "i am just trying *** for a sample code";
var count = Regex.Matches(abc, @"\*").Count;
Console.Out.WriteLine(count); // 输出:3

如果不用逐字字符串,就得写两个反斜杠:"\\*",效果是一样的。

2. 使用Regex.Escape()自动转义

如果你要匹配的字符是动态输入的(不确定是不是特殊元字符),推荐用Regex.Escape()方法自动转义所有正则特殊字符,这样更通用:

string abc = "i am just trying *** for a sample code";
var pattern = Regex.Escape("*"); // 转义后得到 "\*"
var count = Regex.Matches(abc, pattern).Count;
Console.Out.WriteLine(count); // 输出:3

3. 不用正则,直接计数(更高效)

其实对于单个字符的计数需求,完全没必要动用正则——直接遍历字符串统计效率更高,代码也更简洁:

string abc = "i am just trying *** for a sample code";
var count = abc.Count(c => c == '*');
Console.Out.WriteLine(count); // 输出:3

你之前测试其他字符串正常,是因为那些字符串的匹配模式里没有单独出现的正则特殊元字符,或者特殊字符被正确使用了(比如a*表示匹配零个或多个a),但单独的*属于无效的正则语法,所以触发了异常。

内容的提问来源于stack exchange,提问作者Nanopl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:49:48