我正在使用正则表达式,我试图写:
Regex RegObj2 = new Regex("\w[a][b][(c|d)][(c|d)].\w");
两次给我这个错误,每次出现一个\w
:
unrecognized escape sequence
我究竟做错了什么?
您没有\
在非逐字字符串文字中转义 s 。
解决方案:根据字符串文字@
的 C# 规则,在字符串前面放置 a或将反斜杠加倍。
尝试逃脱;)
Regex RegObj2 = new Regex("\\w[a][b][(c|d)][(c|d)].\\w");
或添加@(如@Dominic Kexel 建议的那样)
编写正则表达式时需要两个级别的潜在转义:
在这种情况下,是后者让你绊倒。要么转义 the\
使其成为字符串的一部分,要么使用逐字字符串文字(带@
前缀),这样\
就没有其正常的转义含义。所以这些中的任何一个:
Regex regex1 = new Regex(@"\w[a][b][(c|d)][(c|d)].\w");
Regex regex2 = new Regex("\\w[a][b][(c|d)][(c|d)].\\w");
这两种方法在执行时是绝对等价的。在这两种情况下,您都在尝试使用值创建一个字符串常量
\w[a][b][(c|d)][(c|d)].\w
这两种形式只是在 C# 源代码中表达这一点的不同方式。
反斜杠没有被转义,例如\\
或
new Regex(@"\w[a][b][(c|d)][(c|d)].\w");