Python 2与3 re.sub()regex替换差异

时间:2019-01-04 21:02:28

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

我正在尝试用正则表达式将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的匹配项。

1 个答案:

答案 0 :(得分:1)

这似乎是python 3.7中的有意更改。来自the documentation

  

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

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