如何用正则表达式替换多个重叠模式?

时间:2015-09-04 03:32:18

标签: python regex

我想将所有&&替换为and

例如,x&& && &&应该变为x&& and and

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

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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

您可以在此处使用非字边界。

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

答案 1 :(得分:1)

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

使用lookarounds。不要只使用space assert。请参阅演示。

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

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

输出:'x&& and and'

答案 2 :(得分:0)

这似乎是一个非常古老的帖子。任何寻找替代方法的人也可以使用以下正则表达式。

re.sub(r"(\s)(\&\&)(?=(\s))", r"\1and", a)