首页 > 解决方案 > 正则表达式匹配python中的外大括号

问题描述

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

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 中做类似的事情?

标签: pythonregexpcre

解决方案


您可以使用 JS 正则表达式。你只需要稍微编辑一下。

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

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

然后你可以打电话findall来获取你想要的列表:

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

推荐阅读