如何在YAML文件中替换标签并自动缩进生成换行内容?
解决方案
方案1:使用YAML结构化库操作(首推)
这是最稳妥无兼容问题的方案,完全不需要关心缩进规则:
- 不管你使用的开发语言是什么,直接引入对应语言的YAML处理库(例如Python的
PyYAML、Node.js的js-yaml、Go的gopkg.in/yaml.v3等) - 将原YAML文件内容反序列化为结构化对象
- 直接给对象中对应层级的
http_config字段赋值为{"proxy_url": "http://proxy:8080"} - 最后将结构化对象序列化回YAML文本即可,库会自动按照规范处理所有层级的缩进
方案2:文本动态匹配缩进替换(适合无依赖场景)
如果你坚持要通过文本替换实现,可以通过正则捕获http_config所在行的前置空格数,再叠加子级缩进长度动态生成空格:
以下是Python实现示例:
import re # 原YAML文本 raw_yaml = """- xxx: xxxxxxx xxxxxxxxx: - xxxxxxxxx: xxxx http_config: %httpProxy% """ # 匹配http_config行的前置缩进,re.MULTILINE让^匹配每一行的开头 proxy_pattern = re.compile(r'^(\s+)http_config:\s*%httpProxy%', re.MULTILINE) # 按你的YAML规范配置子级缩进长度,通常为2或4个空格 SUB_INDENT_LENGTH = 2 def replace_proxy(match: re.Match) -> str: # 捕获http_config前的基础缩进 base_indent = match.group(1) # 子级缩进 = 基础缩进 + 额外子级空格 sub_indent = base_indent + " " * SUB_INDENT_LENGTH return f"{base_indent}http_config:\n{sub_indent}proxy_url: http://proxy:8080" # 执行替换 processed_yaml = proxy_pattern.sub(replace_proxy, raw_yaml) print(processed_yaml)
注意:该方案需要你的YAML文件缩进规范统一,不要混用制表符和空格,也不要混用不同的子级缩进长度。
内容的提问来源于stack exchange,提问作者Ken Tsoi
相关产品推荐
相关产品推荐

