Python 如何匹配组中最接近的文本?
我有线铃Python 如何匹配组中最接近的文本?,python,regex,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'),正如所指出的,不贪婪是向前的,而不是
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')
,正如所指出的,不贪婪是向前的,而不是在已经匹配的组上。一种解决方案是在前向匹配组中引入失败的搜索元素:
r"(object1|object2):\s\{(?:[^}]*?)(\w+):\s[\'\"]text2 b[\'\"]"
在这种可能的解决方案中,在匹配结构的子元素之前,将字符“}”从匹配元素中排除,这是有意义的。如图所示,非贪婪性向前工作,而不是在已经匹配的组上。一种解决方案是在前向匹配组中引入失败的搜索元素:
r"(object1|object2):\s\{(?:[^}]*?)(\w+):\s[\'\"]text2 b[\'\"]"
在这种可能的解决方案中,在匹配结构的子元素之前,将字符“}”从匹配元素中排除,这是有意义的。这是因为非贪婪匹配是向前工作的,而不是向后工作的。请看,顺便说一下,我建议使用JSON解析器而不是正则表达式来解析这个字符串。@joanis这个字符串在javascript文件中,所以我不能使用JSON解析器。要解决您的问题,您必须用与
对象不匹配的东西来替换*?
,例如,。\s\{(?!object)(?:*?(\w+)…
,但这只是一个提示,因为如果object
出现在字符串后面的任何位置,它将失败,因此这不会完全解决您的问题。但是您的问题被标记为python,所以可能是因为非贪婪匹配是向前工作的,而不是向后工作的。请参阅,我建议使用JSON解析器而不是正则表达式来解析它,b顺便说一句。@Joan这个字符串是javascript文件中的字符串,所以我不能用JSON解析器来解决您的问题,您必须用与对象不匹配的东西来替换*?
,例如,。\s\{(?!对象)(?:*?)(\w+)…
,但这只是一个提示,因为如果object
出现在字符串后面的任何位置,它将失败,因此这并不能完全解决您的问题。但是您的问题被标记为python,所以可能