2015-09-04 85 views
3

我想用and替换所有出现的&&。例如,x&& && &&应该变成x&& and and如何用正则表达式替换多个重叠模式?

我试过re.sub(' && ', ' and ', 'x&& && && '),但它没有工作,第一个&&已经消耗了空白,所以第二个不匹配。

然后我想到了非捕获组并尝试失败了。

我该如何解决这个问题?

回答

0
(?:^|(?<=\s))&&(?=\s|$) 

使用lookarounds。不消耗space只是assert。看到演示。

https://regex101.com/r/sS2dM8/39

re.sub('(?:^|(?<=\s))&&(?=\s|$)', 'and', 'x&& && &&') 

输出:'x&& and and'

+0

此代码的输出是''×&&和和‘','不’×&&和and'' – PabTorre

+1

@pabtorre现在有一个typo.check – vks

3

你可以在这里使用非单词边界。

>>> re.sub(r'\B&&\B', 'and', 'x&& && &&') 
'x&& and and'