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

Ric*_*ard 9 python regex

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

input=re.sub( r"([a-zA-Z0-9])\s+([a-zA-Z0-9])" , r"\1*\2" , input )
Run Code Online (Sandbox Code Playgroud)

我在字符串上使用正则表达式"3 a 5 b".

我回来了"3*a 5*b".

我想我应该回来"3*a*5*b".

所以我的正则表达式替换在某种程度上相互干扰.

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

unu*_*tbu 18

使用先行断言,(?=...)以免吃掉第二种模式:

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'
Run Code Online (Sandbox Code Playgroud)

  • **记住**,当您将 (group) 更改为 (?=lookahead) 时,(group) 不再存在。这就是为什么这个答案中没有 \2 的原因。 (2认同)