首页 > 解决方案 > Python 2 vs. 3 re.sub() 正则表达式替换差异

问题描述

我正在尝试正则表达式用单个字母替换出现的 n 个字母。应该足够简单,因为我知道正则表达式。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+'as 模式可以部分解决该问题,但显然不适用于 0 长度匹配。

标签: pythonregexpython-3.xpython-2.7

解决方案


这看起来像是 python 3.7 中的有意更改。从文档中

当与先前的非空匹配相邻时,模式的空匹配将被替换。

使用该术语,我发现这篇文章详细说明了如何恢复旧功能。


推荐阅读