Python 构建正则表达式以检测字典

Python 构建正则表达式以检测字典,python,regex,Python,Regex,我一辈子都搞不懂这个。Python 2.7 我有一个类似的配置文件 define something { var val1 var val2 } define something_else { var val3 var val4} ... 我想从“define”开始匹配每个“object”。我想做的基本上是从一个文件中删除这些对象中的一个,如果对象中出现了一个序列 到目前为止我有 re.compile(r“(define.+\{\n)(

我一辈子都搞不懂这个。Python 2.7

我有一个类似的配置文件

define something {
    var    val1
    var    val2
}

define something_else {
    var    val3
    var    val4}
...
我想从“define”开始匹配每个“object”。我想做的基本上是从一个文件中删除这些对象中的一个,如果对象中出现了一个序列

到目前为止我有

re.compile(r“(define.+\{\n)((.*\n)*)(\})”)

但这会匹配所有内容直到最后一个索引,并且不会匹配
}
字符

我还尝试了
re.compile(r“(define.+\{\n)((\s*\s*)*)(\})”)
,但这似乎也不起作用。出于某种原因,正则表达式抓住了所有东西,根本抓不到结束括号

我意识到只有一个结束括号的行可以是

\n}
}
(一些空格数)}
var valx(一些空格数)}

但我认为这不重要


此外,还会预先检查配置文件,以确保var/val语法正确

您需要告诉
+
限定符以非贪婪的方式运行,并且只转到第一个匹配的
}

re.findall(r'define [^{]+{[^}]+?}', data)
# ['define something {\n    var    val1\n    var    val2\n}', 
#  'define something_else {\n    var    val3\n    var    val4}']

啊,
添加?限定符使其以非贪婪或最小方式执行匹配后;将匹配尽可能少的字符
。完全没有利用这一点对我有利。看到你如何最小化我的匹配表达式也有帮助。非常感谢。