72

为什么 pep8 抱怨代码中的下一个字符串?

import re
re.compile("\d{3}")

我收到的警告:

ID:W1401  Anomalous backslash in string: '\d'. String constant might be missing an r prefix.

你能解释一下消息的含义吗?我需要在代码中进行哪些更改才能通过W1401警告?

代码通过测试并按预期运行。此外\d{3}是一个有效的正则表达式。

4

2 回答 2

110

"\d"相同,"\\d"因为 . 没有转义序列d。但是对于代码的读者来说并不清楚。

但是,考虑\t. "\t"代表制表符,而r"\t"代表文字\t字符。

因此,当您的意思是文字\和时,请使用原始字符串d

re.compile(r"\d{3}")

或明确转义反斜杠:

re.compile("\\d{3}")
于 2013-09-26T14:27:02.580 回答
5

Python 无法解析'\d'为转义序列,这就是它产生警告的原因。

之后,它从字面上传递给正则表达式解析器,作为正则表达式的 ES 可以正常工作。

于 2018-07-18T19:07:54.267 回答