转义闭括号

本文关键字:转义 | 更新日期: 2023-09-27 18:15:34

System.Text.RegularExpressions.Regex.Escape()只转义左花括号。是否有一个。net框架方法来转义在正则表达式中使用的闭括号?我似乎找不到。我讨厌硬编码这些字符。

edit:我需要生成"(?<-open>)"标签来平衡组定义。我收到一个表示结束分隔符的字符列表,转义它们,然后将它们添加到"(?<-open>)"标记中的表达式中。所以,是的,我确实也需要转义右花括号

转义闭括号

如上所述,Escape函数的行为如下(MSDN):

逃最小的一组字符 (', *, +, ?, |, {, [, (,), ^, $,., #和空格),将它们替换为它们的转义码。这指示正则表达式引擎按字面意思解释这些字符,而不是作为元字符。

增加了以下注释:

虽然Escape方法转义了右大括号([)和右大括号({)字符,但它不转义它们对应的右大括号(]和})。在大多数情况下,转义这些是不必要的。如果右括号或大括号前面没有相应的开始字符,正则表达式引擎将按字面意思解释。如果将开始大括号或大括号解释为元字符,则正则表达式引擎将第一个相应的结束字符解释为元字符。如果这不是期望的行为,则应该通过显式地加上反斜杠()字符来转义右括号或大括号。有关示例,请参见示例部分。

因此,如果解释器发现}前面没有打开的{,它将自动转义它。

正则表达式。当我试着逃避的时候,两者都逃脱了。你的代码中还有什么别的东西吗?发布一个可重复的转义代码和正则表达式示例将会很有帮助。我认为蒂姆的评论也可能是对正在发生的事情的评论。

一般情况下,测试Regex.Escape()得到以下结果:

Regex.Escape("(Hello)"); // '(Hello')
Regex.Escape("Hello)"); // Hello')
Regex.Escape("(Hello"); // '(Hello

编辑:好的,从评论我明白你的意思{现在,和测试给出的结果,你说。Regex.Escape()试图通过只在需要时转义来提供帮助,但如果这不是您想要的,则没有任何其他内置方法可以工作。我认为你必须1)添加转义它自己丢失,或者2)如果可能的话,格式化你的输入字符串不同,以便Regex。