You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python re模块DeprecationWarning:正则中\d+应使用何种替代方案?

嘿,我来帮你解决这个DeprecationWarning的问题~

首先,咱们先搞清楚为啥会出现这个警告:在Python 3.6的re模块里,默认是Unicode模式,\d会匹配所有Unicode十进制数字(比如全角数字、阿拉伯-Indic数字这类非ASCII数字)。如果你的代码原本期望\d只匹配0-9的ASCII数字,就可能触发这个 deprecation 警告,提示你这种用法可能有歧义。

除了你提到的[0-9]+,还有这些替代方案:

  • 用POSIX字符类[[:digit:]]+:
    这个写法更贴近“数字”的语义,默认模式下和\d行为一致(匹配所有Unicode数字);如果加上re.ASCII标志,就会严格匹配0-9的ASCII数字,和[0-9]+等价。比如:

    import re
    pattern = re.compile(r'\nRevision: ([[:digit:]]+)\n', re.ASCII)
    
  • 保留\d+但添加re.ASCII标志:
    如果你不想改正则表达式的写法,直接给re.compile加上re.ASCII(或者简写re.A)标志,就能把\d的匹配范围限制为ASCII数字,同时消除警告:

    import re
    pattern = re.compile(r'\nRevision: (\d+)\n', re.ASCII)
    

    另外建议你把正则写成原始字符串(加r前缀),像上面这样,避免手动转义\n和\d的麻烦,代码也更清晰。

  • 极端明确写法[0123456789]+:
    这就是把0到9每个数字都列出来,效果和[0-9]+完全一样,适合那种需要绝对明确匹配范围的场景,不过一般没必要这么写。

总结一下:如果只需要匹配ASCII数字,[0-9]+或者带re.ASCII的\d+/[[:digit:]]+都是靠谱的选择;如果需要匹配所有Unicode数字,[[:digit:]]+或者不加标志的\d+(但要注意警告的问题,Python 3.7+可能调整了相关警告逻辑)也可以用。

内容的提问来源于stack exchange,提问作者mchfrnc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:01:46