正则表达式:不匹配字符串的匹配顺序

问题描述:

s = 'blah blah blah... _ABC_superman_is_cool_CBA_ ...blah blah blah...' 

这只是一个例子,但我想匹配_ABC_和_CBA_之间的所有内容。所以'superman_is_cool'。可能有_ABC _..._ CBA_的多个部分。正则表达式:不匹配字符串的匹配顺序

re.findall('_ABC_(.*)(?=_CBA_)', s) 

我首先尝试了这一点,但显然不能正确工作。

我增加了一个额外的_ABC__CBA_对以确保它找到的所有比赛:

>>> s = 'blah blah blah... _ABC_superman_is_cool_CBA_ ...blah blah _ABC_blah_CBA_...' 
>>> re.findall('_ABC_(.*?)_CBA_', s) 
['superman_is_cool', 'blah'] 

?使*运营商非贪婪所以认定为尽可能短的比赛。没有它,结果将是['superman_is_cool_CBA_ ...blah blah _ABC_blah']

+0

+1不过得去贪婪咬伤;) – delnan 2011-01-09 07:00:41

试一下这个

re.findall('_ABC_.*_CBA_)', s) 
+0

这不是一个有效的正则表达式。 – jairajs89 2011-01-09 06:56:00