如果您有一个包含您想要匹配的特殊字符的字符串:
System.Text.RegularExpressions.Regex.Matches(theTextToCheck, myString);
如果myString中有特殊字符,如“%”或“\”,显然会给你错误的结果。
我们的想法是转换myString并将所有出现的特殊字符替换为“%”替换为相应的字符。
有没有人知道如何解决这个问题,或者有人有RegEx吗? :)
更新 以下字符具有特殊含义,我应该通过添加前导反斜杠:\,&,〜,^,%,[,],{,},?,+,*,(,),|, $
还有其他我应该替换的吗?
答案 0 :(得分:2)
由于@Kobi链接到评论中,您需要使用Regex.Escape
来确保正确转义该正则表达式字符串。
通过将其替换为转义码来转义一组最小字符(\,*,+,?,|,{,[,(,),^,$ ,.,#和空格)。这指示正则表达式引擎按字面解释这些字符而不是元字符。
答案 1 :(得分:1)
如果你想要在正则表达式中转义所有带有特殊含义的字符,你可以简单地用反斜杠转义每个字符(转义不需要转义的字符没有坏处。)
但如果你这样做,你为什么要使用Regex而不是string.IndexOf?
答案 2 :(得分:0)
Regex.Escape将为您做到这一点。在msdn doc的某处,它的内容是:
转义转换字符串,以便正则表达式引擎将解释它可能包含的任何元字符作为字符文字
功能描述提供了更多信息。
留待搜索/替换参考。
将此作为你的正则表达式:
(\\|\&|\~|\^|\%|\[|\]|\{|\}|\?|\+|\*|\(|\)|\||\$)
在编号组中获取你的字符
这是你的替换字符串:
\ $ 1
将反斜杠替换为反斜杠加上组内容
示例代码:
Regex re = new Regex(@"(\\|\&|\~|\^|\%|\[|\]|\{|\}|\?|\+|\*|\(|\)|\||\$)");
string replaced = re.Replace(@"Look for (special {characters} and scape [100%] of them)", @"\$1");