首页 > 解决方案 > 如何匹配组中最接近的文本?

问题描述

我有下面的字符串

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')

标签: pythonregex

解决方案


正如所表明的,非贪婪向前推进,而不是在已经匹配的组上。一种解决方案可能是在前向匹配组中引入失败的搜索元素:

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

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


推荐阅读