Python实现嵌套括号内容提取并按规则解析的方案咨询
嵌套括号解析实现方案
你之前使用的正则re.findall('\(([^)]+)',ln)会在匹配到第一个)就停止匹配,遇到嵌套括号时会提前截断内容,无法处理嵌套场景。正则本身对任意层级的嵌套结构支持有限,直接通过栈遍历字符的方式更稳定可靠。
具体实现步骤
- 先封装单个分割后元素的解析函数,通过栈记录括号嵌套层级,逐字符处理内容
- 遍历你已经分割得到的
keys列表,逐个传入解析函数得到最终结果
完整代码示例
def parse_bracket_element(s): # 非括号开头的元素直接返回原字符串 if not s.startswith('('): return s stack = [] current = '' res = None for c in s: if c == '(': # 遇到左括号,把当前内容压栈,重置缓存 stack.append(current) current = '' elif c == ')': # 遇到右括号,弹出栈顶的上一级内容 parent = stack.pop() if not stack: # 已经到最外层括号 if parent: # 有外层key,说明是嵌套结构,返回字典 res = {parent: current} else: # 无外层key,单层括号,返回列表 res = [current] else: # 还在嵌套里,把当前内容拼到上一级 current = parent else: # 普通字符追加到缓存 current += c return res # 衔接你已有的代码 for ln in open(file,"r").read().split("\n"): if ln.startswith(";"): keys = ln[1:].split("_") # 处理每个元素得到最终结果 parsed_result = [parse_bracket_element(k) for k in keys] print(parsed_result)
运行效果测试
针对你的示例标题;star/stellar_(class(ification))_(chart),运行后输出结果为:
['star/stellar', {'class': 'ification'}, ['chart']]
完全符合需求。
内容的提问来源于stack exchange,提问作者dimsdewn
相关产品推荐
相关产品推荐

