构建一个正则表达式来检测词典

时间:2017-01-25 07:55:05

标签: python regex

我无法解决这个问题。 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语法正确。

1 个答案:

答案 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}']