【问题标题】: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'?

标签: python regex python-3.x


【解决方案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 和其他转义字符
猜你喜欢
  • 1970-01-01
  • 2018-08-29
  • 2021-11-25
  • 2016-12-30
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
相关资源
最近更新 更多