C#正则表达式转义序列

14

是否有一个完整的正则表达式转义字符列表?我找到了这个,但它缺少\\\e等内容。到目前为止,我已经编写了一个正则表达式模式,希望能匹配所有转义字符:

 @"\\([bBdDfnreasStvwWnAZG\\]|x[A-Z0-9]{2}|u[A-Z0-9]{4}|\d{1,3}|k<\w+>)"
3个回答

26

或者,如果你仅想正确地转义一个字符串,你可以依赖于 Regex.Escape(),它会为你做必要的转义。

提示: 还有一个 Regex.Unescape()


实际上,我正在尝试对其进行反转义。 - mpen
之前没想到会有 Unescape 函数,但是现在知道了。不过,它无法对 \w\k 进行反转义,而我也需要对它们进行反转义。不过,这个函数可以大大简化其他所有字符的转义...谢谢!天啊...我真希望8小时前就知道这个函数 >.< - mpen
@Mark:下次试试在你最喜欢的搜索引擎中搜索“正则表达式反转义” :-) - VVS
是的,没错 >.< 只是没想到会可能是因为 \w 这样的东西导致不支持... 没想到他们会给我部分支持。 - mpen

7

这个MSDN页面(正则表达式语言元素)是一个很好的起点,其中这个子页面专门介绍转义序列。


1
啊...终于找到了一份完整的参考资料。不过它说:“当跟随一个在此主题和其他表中都无法识别为转义字符的字符时,匹配该字符。”,但是当我试图在正则表达式中输入\y时,它却说这是一个无法识别的转义序列。这是为什么呢? - mpen
1
反斜杠是C#字符串转义序列字符。例如:"\n"是仅包含换行符的字符串。然而,在正则表达式中,反斜杠也开始了转义序列。未识别的转义序列来自于"\y"不是C#转义序列。使用"\y"将确保在初始化字符串时不会尝试任何转义序列。 - Gusdor

5
不要忘记有数以百万计的Unicode类别: \p{Lu}\P{Sm}等。
这些太多了,你无法一一匹配,但我认为你可以使用类似于\\[pP]\{[A-Za-z0-9 \-_]+?\}(未经测试)的东西。
还有一些更简单的内容没有在您的列表中: \.\+\*\? 等等。
如果您只是试图取消转义现有的正则表达式,则可以尝试Regex.Unescape。它不完美,但可能比您或我在短时间内编写的任何内容都要好。

呃...不想处理这个案例。 (谢谢) - mpen
很遗憾,这些会导致“无法识别的转义序列”编译错误,而需要用正字符组(例如[.][+][*][?])进行包装。 - nickl-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接