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

Python中如何匹配Outputs后的多行Export:Name并替换格式?

解决方案

优先推荐:使用YAML解析库处理(更可靠)

直接用正则处理结构化YAML文档容易出现边界错误(比如嵌套结构、注释干扰等),推荐用PyYAML库来解析、修改再生成文档,步骤如下:

  1. 安装PyYAML:
pip install pyyaml
  1. 编写处理代码:
import yaml

# 读取原始YAML内容
with open("your_file.yaml", "r") as f:
    yaml_data = yaml.safe_load(f)

# 处理Outputs部分
if "Outputs" in yaml_data:
    for key, value in yaml_data["Outputs"].items():
        if "Export" in value and "Name" in value["Export"]:
            # 添加ExportName字段并赋值
            value["ExportName"] = value["Export"]["Name"]
            # 删除原有的Export层级
            del value["Export"]

# 写回修改后的YAML
with open("modified_file.yaml", "w") as f:
    yaml.dump(yaml_data, f, default_flow_style=False, sort_keys=False)

这段代码会精准识别Outputs下的每个导出项,将Export.Name的值转移到ExportName字段,同时保留Description等其他字段不受影响。

正则方案(仅适合结构简单的场景)

如果一定要用正则,需要确保只匹配Outputs:之后的目标结构,并且全局替换所有匹配项,代码示例如下:

import re

with open("your_file.yaml", "r") as f:
    content = f.read()

# 定义替换逻辑:对Outputs后的内容批量替换Export-Name结构
def replace_export_blocks(match):
    return re.sub(
        r'\s*Export:\n\s*Name:\s*(.*?)(?=\n\s*\w+:|\Z)',
        r'  ExportName: \1',
        match.group(0),
        flags=re.DOTALL
    )

# 定位Outputs后的内容并执行替换
modified_content = re.sub(
    r'(?<=Outputs:)(.*?)(?=\n\w+:|\Z)',
    replace_export_blocks,
    content,
    flags=re.DOTALL
)

with open("modified_file.yaml", "w") as f:
    f.write(modified_content)

正则说明:

  • (?<=Outputs:)(.*?)(?=\n\w+:|\Z):精准捕获Outputs:之后到下一个顶级键或文档结尾的内容
  • 内部替换正则:匹配缩进的Export:和下一行的Name:,捕获名称值后替换为ExportName: 原名称值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:49:50