C# 转换任何字符串以用作正则表达式中的匹配表达式

C# 转换任何字符串以用作正则表达式中的匹配表达式,c#,regex,C#,Regex,如果您有一个包含要匹配的特殊字符的字符串: System.Text.RegularExpressions.Regex.Matches(theTextToCheck, myString); 如果myString中有特殊字符,如“%”或“\”,它显然会给您错误的结果 其思想是转换myString并将所有出现的特殊字符(如“%”)替换为相应的字符 有人知道如何解决这个问题吗?或者有人有正则表达式吗 更新: 下面的字符有一个特殊的含义,我应该在前面加一个反斜杠:\,&,~,^,%,[,],{,},,,

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

System.Text.RegularExpressions.Regex.Matches(theTextToCheck, myString);
如果myString中有特殊字符,如“%”或“\”,它显然会给您错误的结果

其思想是转换myString并将所有出现的特殊字符(如“%”)替换为相应的字符

有人知道如何解决这个问题吗?或者有人有正则表达式吗

更新: 下面的字符有一个特殊的含义,我应该在前面加一个反斜杠:\,&,~,^,%,[,],{,},,,+,*,(,),|$


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

由于@Kobi链接到注释中,您需要使用以确保正则表达式字符串正确转义

通过用转义码替换最小字符集(\、*、+、?、|、{、[、(、)、^、$、#和空格),对其进行转义。这指示正则表达式引擎按字面解释这些字符,而不是将其作为元字符


如果您想转义在正则表达式中具有特殊含义的所有字符,可以简单地用反斜杠转义每个字符(转义不需要转义的字符没有坏处)


但是如果你这样做了,为什么你要使用正则表达式而不是string.IndexOf?

Regex.Escape会帮你做到这一点。它在msdn文档中的某个地方显示:

Escape转换字符串,以便正则表达式引擎将其可能包含的任何元字符解释为字符文字

这比函数描述更具信息性

这是留给搜索/替换参考的

将其用作正则表达式:

(\\|\&|\~|\^|\%|\[|\]|\{|\}|\?|\+|\*|\(|\)|\||\$)
获取编号组中您感兴趣的角色

并将其作为替换字符串:

\一美元

将匹配项替换为反斜杠加上组内容

示例代码:

Regex re = new Regex(@"(\\|\&|\~|\^|\%|\[|\]|\{|\}|\?|\+|\*|\(|\)|\||\$)");
string replaced = re.Replace(@"Look for (special {characters} and scape [100%] of them)", @"\$1");

可能重复的Hmm,可能我读错了。
%
在.Net正则表达式中没有什么特别的。你是对的,我确实使用了上的快速引用来查找所有特殊字符。谢谢你Kobi,但我认为这不是重复的,因为我找不到解决方案,因为我不知道存在Regex.Escape方法。嗯s only$&有一个特殊的含义。你们认为我应该从问题中删除这些字符吗?我的错,我不知道Regex.Escape!非常感谢。我的示例当然简化了。我格式化了一个更复杂的字符串以匹配,但只应转义其中的一部分。谢谢,但我认为方法Regex.Escape是g的方法o对我来说。(我知道我在问题中要求了正则表达式。)确保regex.Escape可以转义所有必需的字符。