这是一个普通字符串,它有转义机制,在某些字符前加上反斜杠,为它们创建特殊的含义(例如。
\n
,
\u791c
...) 或者剥夺它们的特殊意义(
\"
,
\\
...). 然而,序列
\d
未定义,以及
"\d"
相当于
"d"
.
(因此,您的代码将只匹配由字母的任意重复次数组成的字符串。)
d
没有别的,比如
“d”
,
"dd"
或
"dddddddd"
,这大概不是你想要的——这就是为什么编辑警告你那里可能有什么气味。)
这对于正则表达式来说相当不方便,因为正则表达式也使用反斜杠进行转义,所以每个反斜杠都必须另外转义。生成包含
\d
,必须将反斜杠加倍,以便反斜杠保留下来,以便包含在字符串中:
\\d
.如果你真的想在正则表达式中匹配反斜杠,你必须在正则表达式中转义它,但你也需要在字符串文本中转义它,这会导致一个看起来很可笑的结果
"\\\\"
.
为此,Python有“原始字符串”,反斜杠转义不起作用——反斜杠就是反斜杠。要制作原始字符串,只需预加
r
.
因此,你应该写下以下其中一个:
"^\\d+$"
r"^\d+$"