如何匹配组中最接近的文本?

时间:2019-09-15 14:39:29

标签: python regex

我有波纹管

object1: {
   a: 'text a',
   b: 'text b',
},
object2: {
   a: 'text2 a',
   b: 'text2 b',
}

我有正则表达式

r"(object1|object2):\s\{(?:.*?)(\w+):\s[\'\"]text2 b[\'\"]" with flags re.DOTALL

我应该是('object2', 'b')

但实际是('object1', 'b')

1 个答案:

答案 0 :(得分:2)

如前所述,非贪婪的行为在继续,而不是在已经匹配的群体上。一种解决方案是在您的前向匹配组中引入一个失败的搜索元素:

r"(object1|object2):\s\{(?:[^}]*?)(\w+):\s[\'\"]text2 b[\'\"]"

在这种可能的解决方案中,在匹配结构的子元素之前将char'}'从匹配元素中排除,这很有意义。