我无法解决这个问题。 Python 2.7。
我有一个类似
的配置文件define something {
var val1
var val2
}
define something_else {
var val3
var val4}
...
我希望匹配每个"对象"从"开始。"我想要做的是基本上从文件中删除其中一个完整对象,如果序列发生在对象内部。
到目前为止我已经
了 re.compile(r"(define.+\{\n)((.*\n)*)(\})")
但是这会匹配所有内容,直到最后一个索引并且不会与}
字符匹配。
我也试过re.compile(r"(define.+\{\n)((\s*\S*)*)(\})")
,但这似乎也无效。出于某种原因,正则表达式抓住了一切,并且根本没有抓住结束括号。
我意识到只有一个结束括号的行可能是
\n}
或}
或(some number of spaces) }
或var valx (some number of spaces) }
但我认为这不重要。
还预先检查配置文件以确保var / val语法正确。
答案 0 :(得分:4)
您需要告诉+
限定符以非贪婪的方式行事并且仅转到第一个匹配的}
:
re.findall(r'define [^{]+{[^}]+?}', data)
# ['define something {\n var val1\n var val2\n}',
# 'define something_else {\n var val3\n var val4}']