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

如何用正则表达式与PowerShell修改YAML指定section下的width值

需求:修改YAML中指定Section的width值

YAML示例内容

position:
  height: 100
  width: 200
2position:
  width: 200
  height: 100

需要实现:仅修改position节点下的width值,不影响2position节点,且节点内部的键(比如height、width)顺序可能任意,用PowerShell结合正则表达式完成。

之前尝试的问题

使用了以下正则替换逻辑:

-replace '(?m)(?<=position:)([^[]*width:)(.+?)$','$1 400'

该正则会错误替换文件中最后一个width值,没有正确限定仅在position节点范围内匹配。

正确实现方案

使用以下正则表达式配合PowerShell,精准匹配position:节点下的width行:

(Get-Content -Path "yourfile.yaml" -Raw) -replace '(?ms)(^position:\s*\n)(.*?)(^\s*width:)\s*\d+', '$1$2$3 400' | Set-Content -Path "yourfile.yaml"

正则逻辑说明:

  • (?ms):开启多行模式(m)和单行模式(s),让.能匹配换行符,^匹配每行开头
  • (^position:\s*\n):匹配开头的position:行,捕获为分组1
  • (.*?):非贪婪匹配position:之后到下一个width:之前的所有内容(包括换行和缩进),捕获为分组2
  • (^\s*width:):匹配position节点下的width:行(带任意缩进),捕获为分组3
  • \s*\d+:匹配width:后的空白和数字值
  • 替换为$1$2$3 400:保留原结构,仅把width值改为400

注意事项

  • 确保YAML中position节点是顶级节点,且节点结束于下一个顶级节点(比如2position:),该正则会自动停止在第一个后续顶级节点前,不会影响其他节点。
  • 如果position节点是最后一个顶级节点,也能正常匹配,因为非贪婪匹配会到文件结尾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:22:06