【问题标题】:Python 2 vs. 3 re.sub() regex replace difference [duplicate]Python 2 vs. 3 re.sub() 正则表达式替换差异[重复]
【发布时间】:2019-01-04 21:02:27
【问题描述】:

我正在尝试正则表达式用单个字母替换 n 次出现的字母。应该足够简单,如I know regular expressions。 Python 2.7.15 按预期工作:

>>> re.sub('x*', 'y', 'xxxxx')
'y'
>>> re.sub('x*', 'y', 'zxxxxxz')
'yzyzy'

但是 Python 3.7.2rc1 给了我:

>>> re.sub('x*', 'y', 'xxxxx')
'yy'
>>> re.sub('x*', 'y', 'zxxxxxz')
'yzyyzy'

使用'x+' 作为模式可以部分解决该问题,但显然不适用于 0 长度匹配。

【问题讨论】:

  • 我无法在 Python 3 中重现您的结果。我分别得到 'y' 和 'yzyzy'。
  • @Tomothy32 我确实在 Linux 上的 3.7.2 中重现了它,你使用的是什么版本的 python3?
  • 我无法在 Python 3.4.5 中重现。
  • 找到了一台使用 Python 3.5.3 的机器,按预期工作类似于 v2.7
  • @eyllanesc 没关系,刚刚意识到我使用的是 3.6.7 解释器。

标签: python regex python-3.x python-2.7


【解决方案1】:

这看起来像是 python 3.7 中的有意更改。来自the documentation:

模式的空匹配项在与前一个相邻时被替换 非空匹配。

使用该术语,我发现 this post 详细说明了如何恢复旧功能。

【讨论】:

    猜你喜欢
    • 2022-11-29
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2011-01-04
    • 2013-06-13
    • 1970-01-01
    相关资源
    最近更新 更多