Python 构建正则表达式以检测字典
我一辈子都搞不懂这个。Python 2.7 我有一个类似的配置文件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)(
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}']
啊,
添加?限定符使其以非贪婪或最小方式执行匹配后;将匹配尽可能少的字符
。完全没有利用这一点对我有利。看到你如何最小化我的匹配表达式也有帮助。非常感谢。