DeprecationWarning:无效转义序列-用什么代替\d?

我在Python 3.6.5中遇到了re模块的问题。 我在正则表达式中有这样的模式:

'\\nRevision: (\d+)\\n'

但是当我运行它时,我得到一个DeprecationWarning

我搜索了关于SO的问题,实际上还没有找到答案——我应该用什么来代替\d+?只是[0-9]+或者其他东西?

114752 次浏览

Python 3将字符串字面量解释为Unicode字符串,因此您的\d将被视为转义的Unicode字符。

声明你的RegEx模式为一个原始字符串,而不是通过r前置,如下所示:

r'\nRevision: (\d+)\n'

这也意味着你可以删除\n的转义,因为这些转义只会被re解析为换行符。

你会得到一个弃用警告

'\\nRevision: (\d+)\\n'

因为Python将\d解释为无效转义序列。同样,Python不会替换该子字符串,但从3.6版开始就会发出警告:

与标准C不同,所有无法识别的转义序列都保留在字符串中,即反斜杠保留在结果中。(此行为在调试时很有用:如果转义序列输入错误,则结果输出更容易被识别为损坏。)同样重要的是要注意,仅在字符串字面值中识别的转义序列属于字节字面值的不可识别转义类别。

在3.6版更改:无法识别的转义序列产生DeprecationWarning。在未来的Python版本中,它们将是SyntaxWarning,最终是SyntaxError。

()


因此,可以通过正确转义反斜杠或使用原始字符串来修复此警告。

这意味着,要更多地逃避:

'\\nRevision: (\\d+)\\n'

或者,使用原始字符串字面值(其中\不开始转义序列):

r'\nRevision: (\d+)\n'