C# 转义右括号

C# 转义右括号,c#,regex,C#,Regex,System.Text.RegularExpressions.Regex.Escape()仅转义大括号。是否有一个.NET Framework方法可以在正则表达式中使用而不使用大括号?我好像找不到。我不喜欢硬编码的字符 编辑:我需要为平衡组定义生成“(?)”标记。我收到一个表示结束分隔符的字符列表,对它们进行转义,然后将它们添加到“(?)”标记中的表达式中。所以,是的,我确实也必须避开右大括号。Regex.escape在我尝试时两个都避开了。您的代码中是否还有其他内容?发布转义代码和正则表达式的

System.Text.RegularExpressions.Regex.Escape()
仅转义大括号。是否有一个.NET Framework方法可以在正则表达式中使用而不使用大括号?我好像找不到。我不喜欢硬编码的字符


编辑:我需要为平衡组定义生成“(?)”标记。我收到一个表示结束分隔符的字符列表,对它们进行转义,然后将它们添加到“(?)”标记中的表达式中。所以,是的,我确实也必须避开右大括号。

Regex.escape在我尝试时两个都避开了。您的代码中是否还有其他内容?发布转义代码和正则表达式的可复制示例会很有帮助。我认为蒂姆的评论可能也很中肯

FWIW,测试Regex.Escape()会给出以下结果:

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

编辑:好的,从评论中我知道你的意思是{now,用它进行测试会得到你所说的结果。Regex.Escape()只是在需要的时候才转义,这很有帮助,但是如果这不是你想要的,这里没有任何其他内置方法可以工作。我认为你必须1)添加自己缺少的转义,或者2)如果可能,以不同的格式设置输入字符串,以便Regex.Escape可以按预期工作。

如上面的评论所述,Escape函数的行为如下():

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

增加以下备注:

虽然转义方法转义直括号([)和大括号({)字符,但它不会转义它们相应的结束字符(]和})。在大多数情况下,转义这些字符是不必要的。如果右括号或大括号前面没有相应的开头字符,则正则表达式引擎会逐字解释它。如果右括号或大括号被解释为元字符,则正则表达式引擎会解释第一个相应的结尾字符racter作为元字符。如果这不是所需的行为,则应通过显式地在反斜杠()字符前面加上右括号或大括号进行转义。有关说明,请参阅示例部分


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

MSDN说,“如果一个结束括号或大括号前面没有相应的开头字符,正则表达式引擎将逐字解释它。”。你确定你还需要避开大括号吗?@TimBourguignon:我想你最好把它作为一个答案。有趣的是,当我尝试同样的事情时,第二个结果是“你好”。嗯。奇怪。这些是括号(又称圆括号);试着用方括号或大括号(人们通常所说的“大括号”)括起来根据我的经验),你会发现它只会逃过开头的一个。哦,仔细检查,是的,我在示例中使用了方括号。啊,对不起,我当时误解了,我现在编辑了答案。我从维基百科上看到称之为“大括号”在美国很常见,但如果你不是那里人,这个词可能会有点让人困惑!我知道。但是,这不是我要问的:-)无论如何,谢谢你的回答,这里有一个向上的投票。谢谢向上的投票。我发现最好的办法是用你自己的EscapeeExtended()扩展正则表达式类函数处理这些额外字符;但这几乎是您不想做的硬编码。是的,我已经编写了一个私有静态方法来实现这一点,无需将其添加到正则表达式类中。因此,现在我正在寻找一个更优雅的解决方案。。。