弃用警告:无效的转义序列 - 用啥代替 \d?

Posted

技术标签:

【中文标题】弃用警告:无效的转义序列 - 用啥代替 \\d?【英文标题】:DeprecationWarning: invalid escape sequence - what to use instead of \d?弃用警告:无效的转义序列 - 用什么代替 \d? 【发布时间】:2018-11-03 09:29:18 【问题描述】:

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

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

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

我搜索了the problem on SO,但实际上并没有找到答案——我应该使用什么来代替\d+?只是[0-9]+ 还是别的什么?

【问题讨论】:

应该没问题,提供更多代码? 双重转义\d或使用r'\\nRevision: (\d+)\\n'? 【参考方案1】:

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

通过添加 r 将您的 RegEx 模式声明为原始字符串,如下所示:

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

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

【讨论】:

更准确地说,\d 被视为无法识别的转义序列,因此保持不变。自 Python 3.6 起给出了 DeprecationWarning。在 Python 的某些未来版本中,它将是一个 SyntaxError。文档中“2.4.1. String and Bytes literals”的详细信息。 @VPfB 线程很旧,但我正在寻找相同问题的答案。如果 \d 被视为转义的 Unicode 字符,如何在不将正则表达式模式视为原始字符串的情况下将 d(字母字符)与 \d(任何数字)区分开来? (同样的问题适用于 \w、\W 等...) @theggg 如果我正确理解了您的问题 - 请转义您的反斜杠,因此字符串将显示为 '\\d' 这也适用于\s 和其他转义字符

以上是关于弃用警告:无效的转义序列 - 用啥代替 \d?的主要内容,如果未能解决你的问题,请参考以下文章

Julia - 由显示方程触发的无效转义序列

Java 无效的转义序列

Swift UITesting 错误:文字中的转义序列无效。 \U201c

如何在Python中修复“DeprecationWarning:无效的转义序列”?

解决警告: DeprecationWarning: invalid escape sequence D

io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException:错误的字符串无效的转义序列