DeprecationWarning:无效的转义序列 - 使用什么而不是\ d?

mch*_*rnc 56 python regex python-3.x

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

'\\nRevision: (\d+)\\n'
Run Code Online (Sandbox Code Playgroud)

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

在SO上搜索了这个问题,但实际上还没有找到答案 - 我应该用什么而不是\d+?只是[0-9]+或者别的什么?

ACa*_*ino 95

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

将您的RegEx模式声明为原始字符串,而不是预先添加r,如下所示:

r'\nRevision: (\d+)\n'
Run Code Online (Sandbox Code Playgroud)

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

  • @theggg如果我正确理解你的问题 - 转义你的反斜杠,所以字符串将显示为“\\d”。 (5认同)
  • 更确切地说,将\ d视为无法识别的转义序列,因此保持不变。从Python 3.6开始提供了DeprecationWarning。在将来的Python版本中,它将是SyntaxError。详细信息来自文档中的“ 2.4.1。字符串和字节文字”。 (2认同)
  • 这也适用于“\s”和其他转义字符 (2认同)

max*_*zig 6

您收到弃用警告

'\\nRevision: (\d+)\\n'
Run Code Online (Sandbox Code Playgroud)

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

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

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

来源


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

这意味着,更多地逃避:

'\\nRevision: (\\d+)\\n'
Run Code Online (Sandbox Code Playgroud)

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

r'\nRevision: (\d+)\n'
Run Code Online (Sandbox Code Playgroud)