C#含特殊字符字符串计数问题:正则匹配右括号不足报错
解决正则匹配带特殊字符字符串时的参数错误问题
别慌!这个问题我踩过同款坑~你遇到的错误是因为正则表达式里的特殊字符没有被转义导致的。
问题原因
你要搜索的字符串Nachricht erhalten (里包含(,而(在正则语法中是用来定义分组的特殊元字符,不是普通的文本字符。当正则引擎解析到这个未闭合的(时,会认为你的正则语法不完整(缺少对应的)),所以抛出System.ArgumentException错误。
解决方案
最稳妥的方式是把用户输入的搜索词自动转义成正则安全的字符串,用.NET里的Regex.Escape()方法就能搞定——它会自动把所有正则特殊字符(比如(, ), *, .这些)转义成普通文本字符。修改后的代码如下:
count = Regex.Matches(_editor.Text, Regex.Escape(txtLookFor.Text), RegexOptions.IgnoreCase).Count;
如果只是临时处理单个符号,你也可以手动给(加转义符,写成Nachricht erhalten \(,但显然自动转义的方式更通用——不管用户输入什么带特殊符号的搜索词,都能完美适配,不会再出现语法错误。
之前的搜索词没有包含正则特殊字符,所以代码能正常运行,这次的括号刚好触发了正则的语法校验,才暴露了这个问题~
内容的提问来源于stack exchange,提问作者Soeren3003
相关产品推荐
相关产品推荐

