Python如何提取字符串中重复出现的{}包裹的文本内容?
解决方案
Python完全可以实现该提取需求,直接使用标准库re(正则表达式模块)即可完成,无需安装第三方依赖。
实现逻辑
针对无嵌套{}的场景,使用正则匹配规则:从左大括号{开始,匹配所有内部不含大括号的字符,直到遇到第一个右大括号}结束,避免跨内容匹配错误。
完整代码
import re # 原始待处理字符串 string = 'Revenue for the period is {value="32", font="34"} and EBITDA is {value="12", font="34"} for 2022' # 正则匹配规则:匹配{}包裹、内部无其他{}的内容 match_pattern = r'\{[^{}]*\}' # findall直接返回所有匹配结果组成的列表 output = re.findall(match_pattern, string) print(output)
运行后输出结果:
['{value="32", font="34"}', '{value="12", font="34"}']
如果原始字符串保留了HTML转义字符",该规则同样可以正常匹配,输出结果会和原字符串中包裹的内容完全一致。
注意事项
- 该写法仅适用于
{}无嵌套的场景,如果待提取内容里存在大括号嵌套(比如{a: {b:1}}),简单正则无法正确匹配,需要额外编写括号层级计数的逻辑处理 - 规则里用
[^{}]*替代通用的.*?非贪婪匹配,兼容字符串内存在换行、特殊符号的场景,匹配稳定性更高
内容的提问来源于stack exchange,提问作者Finntech
相关产品推荐
相关产品推荐

