You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python拆分特定格式字符串并实现层级化格式化输出?

层级节点解析与格式化解决方案

核心思路

  • 先通过正则匹配拆分原始字符串,分离出所有节点标记(以$$开头、包含<block=begin>/<block=end>的片段)和中间文本内容,得到混合列表。
  • 用栈结构处理嵌套逻辑:遇到begin标记时入栈并提升缩进层级,遇到end标记时出栈并降低缩进层级。
  • 根据当前层级对每个元素添加对应缩进,最终拼接成层级化的输出字符串。

代码实现(Python)

import re

def parse_nested_nodes(input_str):
    # 正则匹配所有节点标记,拆分字符串为标记和文本的混合列表
    pattern = re.compile(r'(\$\$[A-Za-z0-9_]+<block=(begin|end)>)')
    raw_parts = pattern.split(input_str)
    # 过滤空内容并去除首尾空格
    cleaned_parts = [p.strip() for p in raw_parts if p.strip()]
    
    stack = []
    indent_level = 0
    indent_unit = "   "  # 用3个空格作为缩进单位
    result_lines = []
    
    for part in cleaned_parts:
        if "<block=begin>" in part:
            # 处理开始节点:先添加当前层级的标记,再入栈提升层级
            result_lines.append(indent_unit * indent_level + part)
            stack.append(part)
            indent_level += 1
        elif "<block=end>" in part:
            # 处理结束节点:先降低层级,再添加对应缩进的标记
            indent_level -= 1
            result_lines.append(indent_unit * indent_level + part)
        else:
            # 处理文本内容:添加当前层级的缩进
            result_lines.append(indent_unit * indent_level + part)
    
    return "\n".join(result_lines)

# 测试用例
test_case1 = "$$Node_Type<block=begin>Blabla$$Node_Type<block=end>"
test_case2 = "$$Node_Type1<block=begin>Blabla1$$Node_Type2<block=begin>Blabla2$$Node_Type2<block=end>$$Node_Type1<block=end>"

print("测试用例1输出:")
print(parse_nested_nodes(test_case1))
print("\n测试用例2输出:")
print(parse_nested_nodes(test_case2))

关键逻辑说明

  1. 正则拆分:通过正则表达式精准匹配节点标记,确保将原始字符串拆分为[标记, 文本, 标记, ...]的结构,为后续处理打下基础。
  2. 栈维护层级:栈的入栈/出栈操作严格对应嵌套结构的开启/闭合,保证缩进层级的准确性,避免嵌套错乱。
  3. 缩进格式化:用固定的缩进单位(如3个空格)对不同层级的内容进行对齐,最终输出符合要求的层级化文本。

实际输出效果

测试用例1输出:

$$Node_Type<block=begin>
   Blabla
$$Node_Type<block=end>

测试用例2输出:

$$Node_Type1<block=begin>
   Blabla1
   $$Node_Type2<block=begin>
      Blabla2
   $$Node_Type2<block=end>
$$Node_Type1<block=end>

内容的提问来源于stack exchange,提问作者SanjiSqurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:40:38