python - 正则表达式匹配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 中做类似的事情?
解决方案
您可以使用 JS 正则表达式。你只需要稍微编辑一下。
.+ {[\s\S]*?^}
我替换profile
为.*
使其不仅匹配profile { ... }
。我也使该组不被捕获,因为您不关心花括号内的内容。你只想要整件事。
然后你可以打电话findall
来获取你想要的列表:
matches = re.findall(r".+ {(?:[\s\S]*?)^}", test_str, re.MULTILINE)
推荐阅读
- r - 您可以从 tmap 切换到传单吗?
- python - 从终端运行脚本时无法导入 tensorflow,即使 tensorflow 在 jupyter notebook 和终端中工作
- blazor - Blazor 服务器 api 返回文本/html
- python - Canny 边缘检测不适用于高斯模糊图像
- c# - Unity3D:检测鼠标是否单击了 UI 元素?
- javascript - 使用 Firebase 进行 Shopify 身份验证验证?
- java - Ctrl + Shift + L 快速搜索在 STS Spring Tools 4 和 Eclipse 中不起作用
- reactjs - 使用 useState 钩子时计数器不增加
- powershell - 使用 Add() 方法填充数据时,无法在 Powershell 中使用 foreach 迭代字符串 HashSet
- sql - 没有重复的源目标表