我有以下正则表达式替换:
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'