0

我正在使用正则表达式,我试图写:

Regex RegObj2 = new Regex("\w[a][b][(c|d)][(c|d)].\w");

两次给我这个错误,每次出现一个\w

unrecognized escape sequence

我究竟做错了什么?

4

4 回答 4

4

您没有\在非逐字字符串文字中转义 s 。

解决方案:根据字符串文字@的 C# 规则,在字符串前面放置 a或将反斜杠加倍。

于 2013-01-25T13:58:15.623 回答
3

尝试逃脱;)

Regex RegObj2 = new Regex("\\w[a][b][(c|d)][(c|d)].\\w");

或添加@(如@Dominic Kexel 建议的那样)

于 2013-01-25T13:58:23.580 回答
1

编写正则表达式时需要两个级别的潜在转义:

  • 正则表达式转义(例如转义括号,或者在这种情况下指定字符类)
  • C# 字符串文字转义

在这种情况下,是后者让你绊倒。要么转义 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# 源代码中表达这一点的不同方式。

于 2013-01-25T14:00:38.397 回答
0

反斜杠没有被转义,例如\\

new Regex(@"\w[a][b][(c|d)][(c|d)].\w");
于 2013-01-25T13:59:47.947 回答