贪婪的正则表达式或逻辑

时间:2017-06-06 02:05:43

标签: python regex

考虑字符串'X Y Z'和替换

re.sub('Y|Y Z', '', 'X Y Z')

返回

'X  Z'

当它可以返回'X '时。显然,它首先匹配,替换,然后其他替代方案的模式不再匹配。

有没有办法告诉替代品更喜欢最长的替代品?

2 个答案:

答案 0 :(得分:2)

根据Python re documentation - Regular Expression Syntax, | part

  

A|B,其中A和B可以是任意RE,创建正则表达式   这将匹配A或B.任意数量的RE都可以   由' |'分隔通过这种方式。这可以在组内使用(参见   下面)。扫描目标字符串时,RE由' |'分隔。   从左到右尝试。当一个模式完全匹配时,   该分支被接受。这意味着一旦A匹配,B将不会   进一步测试,即使它会产生更长的整体匹配。在   换句话说,' |'操作员从不贪心。要匹配文字' |',   使用\ |,或将其括在字符类中,如[|]。

在较短的图案之前定位最长的图案:

>>> re.sub('Y Z|Y', '', 'X Y Z')
'X '

答案 1 :(得分:1)

那将是......

re.sub('Y( Z)*','','X Y Z')