假设我有一个文字:
cool randomtext1 cool randomtext2 cool randomtext3 good cool
我如何匹配最内在的
cool randomtext3 good
当我尝试
r'cool.*?good'时,它匹配
cool randomtext1 cool randomtext2 cool randomtext3 good
答案 0 :(得分:1)
您可以使用这种基于环视的正则表达式:
r'\bcool\b(?:(?!\b(cool|good)\b).)*\bgood\b'
此处(?:(?!\b(cool|good)\b).)*
将匹配任何非cool
或good
的文字中的0个或多个。 \b
已用于字边界。
这将匹配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)