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


106

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

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

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

在SO上搜索了问题,但没有找到答案,实际上-我应该用什么代替\d+?只是[0-9]+还是其他?


2
提供更多代码不应该是问题吗?
Sraw

3
两次逃脱\d还是使用r'\\nRevision: (\d+)\\n'
雷沃

Answers:


176

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

将RegEx模式声明为原始字符串,而不是通过在前面加上r,如下所示:

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

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


8
稍微精确一点,\d被视为无法识别的转义序列,因此保持不变。自Python 3.6起提供了DeprecationWarning。在将来的Python版本中,它将是SyntaxError。详细信息来自文档中的“ 2.4.1。字符串和字节文字”。
VPfB

@VPfB线程很旧,但是我正在寻找相同问题的答案。如果将\ d视为转义的Unicode字符,如何将d(字母字符)与\ d(任何数字)区分开来,而不将正则表达式模式视为原始字符串?(相同的问题适用于\ w,\ W等...)
giulia_dnt

2
@theggg如果我正确理解了您的问题-请转义您的反斜杠,这样字符串将显示为'\\d'
ACascarino
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.