我在Python 3.6.5中遇到了re模块的问题。 我在正则表达式中有这样的模式:
'\\nRevision: (\d+)\\n'
但当我运行它时,我会得到DeprecationWarning。
我在SO上搜索了这个问题,还没有找到答案,实际上——我应该用什么来代替\d+?只是[0-9]+或者其他?
我在Python 3.6.5中遇到了re模块的问题。 我在正则表达式中有这样的模式:
'\\nRevision: (\d+)\\n'
但当我运行它时,我会得到DeprecationWarning。
我在SO上搜索了这个问题,还没有找到答案,实际上——我应该用什么来代替\d+?只是[0-9]+或者其他?
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'