正则表达式如何得到一个非贪婪的比赛

时间:2015-12-15 18:47:37

标签: regex

假设我有一个文字:

cool randomtext1 cool randomtext2 cool randomtext3 good cool

我如何匹配最内在的

cool randomtext3 good

当我尝试

r'cool.*?good'
时,它匹配
cool randomtext1 cool randomtext2 cool randomtext3 good

1 个答案:

答案 0 :(得分:1)

您可以使用这种基于环视的正则表达式:

r'\bcool\b(?:(?!\b(cool|good)\b).)*\bgood\b'

此处(?:(?!\b(cool|good)\b).)*将匹配任何非coolgood的文字中的0个或多个。 \b已用于字边界。

RegEx Demo

这将匹配cool randomtext3 good

<强>代码:

p = re.compile(ur'\bcool\b(?:(?!\b(cool|good)\b).)*\bgood\b')
test_str = u"cool randomtext1 cool randomtext2 cool randomtext3 good cool"

re.findall(p, test_str)