使用正则表达式替换重叠的子模式



我有以下正则表达式替换:

input=re.sub( r"([a-zA-Z0-9])s+([a-zA-Z0-9])" , r"1*2" , input )

我对字符串"3 a 5 b"使用正则表达式。

我得到了"3*a 5*b"

我想我应该把"3*a*5*b"拿回来。

所以我的正则表达式替换会互相干扰

我能做什么来得到我想要的结果,除了正则表达式的迭代运行?

使用前瞻性断言(?=...),以免占用第二个模式:

In [33]: re.sub( r"([a-zA-Z0-9])s+(?=[a-zA-Z0-9])" , r"1*" , '3 a 5 b')
Out[33]: '3*a*5*b'
In [32]: re.sub( r"([a-zA-Z0-9])s+(?=[a-zA-Z0-9])" , r"1*" , "3 /a 5! b" )
Out[32]: '3 /a*5! b'

在使用Python时,正则表达式并不总是最好的工具。对于上面描述的情况,Python提供了一个更简单、更易读、更可维护的方法:

>>> s = "3 a 5 b"
>>> '*'.join(s.split())
'3*a*5*b'

最新更新