Python正则表达式替换

时间:2016-05-18 17:43:24

标签: python regex

我有以下字符串:"n && && && && && &&n"我希望&&替换为and,但只考虑那些在其之前和之后有空格的&&

我使用以下代码:

import re
str = input()
change = re.sub(r' (&&) ', ' and ', str)
print (change)

但输出结果如下:n and && and && and &&n

正确的输出应为:n and and and and and &&n

有人可以告诉我哪里出错了吗?

3 个答案:

答案 0 :(得分:1)

在您的表达式中,您希望将空格计数两次,但&&之后的空格将使其无法在下一个&&之前计为空格。您正在寻找“lookarounds”:

>>> import re
>>> s = 'n && && && && && &&n'
>>> change = re.sub(r'(?<= )(&&)(?= )', 'and', s)
>>> print (change)
n and and and and and &&n

这些“查看”给定的匹配而不实际消耗它们。你实际上只对and感兴趣;他们只需被空间包围。

此外,请不要为变量str命名,否则您很难访问内置函数str()

答案 1 :(得分:0)

问题在于&amp; n&amp;&amp;首先,第一次替换匹配拾取&#39;。一旦那个空间在&amp;&amp;被删除(虽然替换为&#39;和&#39;中的空格),但不能在另一场比赛中使用。

好消息是,在你的子传递后,你永远不会以连续的&amp;&amp; s结束 - 对于最简单的解决方案 - 你可以只运行两次:

{{1}}

答案 2 :(得分:0)

在进行一次替换后,您的正则表达式不会再次查看结束空格,因此检查的下一个字符将是“&amp;&amp; ...”。取而代之的是“向前看”而不是替换它:

change = re.sub(r' (&&)(?= )',' and',str)