System.Text.RegularExpressions.Regex.Escape()
只能脱开大括号。是否有一个.NET Framework方法逃避了在正则表达式中使用大括号?我似乎无法找到任何。我讨厌硬编码字符。逃脱关闭大括号
编辑:我需要为平衡组定义生成“(?< -open>)”标记。我收到代表结尾分隔符的字符列表,将它们转义并将它们添加到“(?< -open>)”标记中的表达式中。所以,是的,我真的不得不逃避右花括号。
System.Text.RegularExpressions.Regex.Escape()
只能脱开大括号。是否有一个.NET Framework方法逃避了在正则表达式中使用大括号?我似乎无法找到任何。我讨厌硬编码字符。逃脱关闭大括号
编辑:我需要为平衡组定义生成“(?< -open>)”标记。我收到代表结尾分隔符的字符列表,将它们转义并将它们添加到“(?< -open>)”标记中的表达式中。所以,是的,我真的不得不逃避右花括号。
当我尝试它时,Regex.Escape确实会逃脱。你的代码中还有其他的东西吗?发布一个可重复使用的转义代码和正则表达式的例子会很有帮助。我认为蒂姆的评论可能也是关于发生了什么的标志。
FWIW,测试Regex.Escape()给出了以下结果:
Regex.Escape("(Hello)"); // \(Hello\)
Regex.Escape("Hello)"); // Hello\)
Regex.Escape("(Hello"); // \(Hello
编辑:从我明白你的意思的意见确定{现在,并与测试给你说的结果。 Regex.Escape()试图在需要时才转义,但如果这不是你想要的,那么没有任何其他内置方法可以工作。我认为你必须1)添加它自己丢失的内容,或者2)如果可能的话,以不同的方式格式化你的输入字符串,这样Regex.Escape将按预期工作。
如在评论说以上,退出函数的行为如下(MSDN):
转义最少的一组字符(\,*,+,的|,{[? ,(,),^,$,。,#,和空格)替换它们的转义码。这指示正则表达式引擎逐字地解释这些字符而不是元字符。
以下备注添加:
虽然退出方法逸出的直开口括号([)和开口括号({)字符,它不会逃脱其相应的闭合字符(]和} )。在大多数情况下,逃避这些是没有必要的。 如果右括号或大括号没有对应的开头字符,则正则表达式引擎会按字面解释。如果开头的大括号或大括号被解释为元字符,则正则表达式引擎将第一个对应的结尾字符解释为元字符。如果这不是所需的行为,则应通过显式预置反斜杠()字符来隐藏结束括号或大括号。有关说明,请参阅示例部分。
因此,如果解释器发现不被开口{
它将自动地逃脱它前面一个}
。
MSDN说:“如果右括号或大括号没有对应的开头字符,则正则表达式引擎会直接解释它”。你确定你需要逃避闭合括号吗? –
@TimBourguignon:我想你也可以把这个作为答案。 –