如上面的评论中所述,Escape函数的行为如下(MSDN):
通过用它们的转义码替换它们来转义一组最小字符(\,*,+,?,|,{,[,(,),^,$ ,.,#和空格).这指示正则表达式引擎按字面解释这些字符而不是元字符.
添加以下注释:
当Escape方法转义直开括号([)和开括号({)字符时,它不会转义它们对应的结束字符(]和}).在大多数情况下,没有必要逃避这些.如果右括号或括号前面没有相应的开头字符,则正则表达式引擎会按字面解释它.如果将开头的braket或大括号解释为元字符,则正则表达式引擎将第一个对应的结束字符解释为元字符.如果这不是所需的行为,则应通过显式添加反斜杠()字符来转义右括号或括号.有关说明,请参阅"示例"部分.
因此,如果解释器发现一个}前面没有开头{,它将自动逃避它.
当我尝试时,Regex.Escape 确实逃脱了两者。您的代码中还有其他情况吗?发布转义代码和正则表达式的可重现示例会很有帮助。我认为蒂姆对于正在发生的事情的评论可能也很中肯。
FWIW,测试 Regex.Escape() 给出以下结果:
Regex.Escape("(Hello)"); // \(Hello\)
Regex.Escape("Hello)"); // Hello\)
Regex.Escape("(Hello"); // \(Hello
Run Code Online (Sandbox Code Playgroud)
编辑:好的,从评论中我明白你的意思是 { 现在,并用它进行测试给出你所说的结果。Regex.Escape() 试图通过仅在需要时转义来提供帮助,但如果这不是您想要的,则没有任何其他内置方法可以工作。我认为你必须 1)添加你自己缺少的转义,或者 2)如果可能的话,以不同的方式格式化你的输入字符串,以便 Regex.Escape 能够按预期工作。