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
相关产品推荐
相关产品推荐

