我有波纹管
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')
答案 0 :(得分:2)
如前所述,非贪婪的行为在继续,而不是在已经匹配的群体上。一种解决方案是在您的前向匹配组中引入一个失败的搜索元素:
r"(object1|object2):\s\{(?:[^}]*?)(\w+):\s[\'\"]text2 b[\'\"]"
在这种可能的解决方案中,在匹配结构的子元素之前将char'}'从匹配元素中排除,这很有意义。