转换任何字符串以在regex中用作匹配表达式

时间:2012-03-30 09:07:09

标签: c# regex

如果您有一个包含您想要匹配的特殊字符的字符串:

System.Text.RegularExpressions.Regex.Matches(theTextToCheck, myString);

如果myString中有特殊字符,如“%”或“\”,显然会给你错误的结果。

我们的想法是转换myString并将所有出现的特殊字符替换为“%”替换为相应的字符。

有没有人知道如何解决这个问题,或者有人有RegEx吗? :)

更新 以下字符具有特殊含义,我应该通过添加前导反斜杠:\,&,〜,^,%,[,],{,},?,+,*,(,),|, $

还有其他我应该替换的吗?

3 个答案:

答案 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");