考虑字符串'X Y Z'
和替换
re.sub('Y|Y Z', '', 'X Y Z')
返回
'X Z'
当它可以返回'X '
时。显然,它首先匹配,替换,然后其他替代方案的模式不再匹配。
有没有办法告诉替代品更喜欢最长的替代品?
答案 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')