Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何匹配组中最接近的文本?_Python_Regex - Fatal编程技术网

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,所以可能