正则表达式匹配Python中的外括号

时间:2019-02-24 16:46:08

标签: python regex pcre

我有一些用嵌套花括号格式化的f5 config数据字符串,如下所示:

profiles {
    /Common/http { }
    /Common/serverssl {
        context serverside
    }
    /Common/tcp { }
    SOME_CRED_MGMT.DOMAIN_some_date {
        context clientside
    }
}
rules {
    /Common/X-FORWARDED-FOR
}
snat {
    pool SOME_SNAT.POOL
    type snat
}

我想从上面的组中获取类似的列表:

some_list = ["profiles{..}", "rules{..}", "snat{..}"]

搜索后,我发现了类似的内容(在JS中):

profiles {([\s\S]*?)^}

(在PCRE中也是如此)

({((?(?={)(?R)|[^}])*)})

但是它们不适用于Python。如何在Python中做类似的事情?

1 个答案:

答案 0 :(得分:0)

您可以使用JS正则表达式。您只需要对其进行一点编辑即可。

.+ {[\s\S]*?^}

我将profile替换为.*,以便它不仅匹配profile { ... }。我也使该组不被捕获,因为您不关心花括号内的内容。您只想要整个事情。

然后您可以致电findall来获取所需的列表:

matches = re.findall(r".+ {(?:[\s\S]*?)^}", test_str, re.MULTILINE)