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

如何用正则匹配并替换YAML中“IP Address”键下的IP地址

仅替换YAML中“IP Address”键对应的IP地址(含多行缩进值)

需求说明

我有一份YAML文件,其中IP Address键的取值是IP地址,可能是单行形式,也可能是多行缩进的形式(每行一个IP)。文件里其他键的取值即便符合x.x.x.x的IP格式,也不能被正则匹配替换。需要实现:

  • 仅匹配IP Address键对应的所有IP(包括后续缩进行的IP)
  • 将这些IP替换为指定值some-replaced-value
  • 保留每行开头的空格,保证YAML格式有效

示例输入

test-key-1: some_value
test-key-2: 8.23.12.0
test-key-3: some_value
IP Address: 127.0.0.1
 127.0.0.1
 127.0.0.1
 127.0.0.1
test-key-4: test-value

期望输出

test-key-1: some_value
test-key-2: 8.23.12.0
test-key-3: some_value
IP Address: some-replaced-value
 some-replaced-value
 some-replaced-value
 some-replaced-value
test-key-4: test-value

解决方案

使用正向环视+多行模式的正则表达式,精准定位IP Address关联的IP地址:

正则匹配规则

(?<=IP Address: |^ +)\b(?:\d{1,3}\.){3}\d{1,3}\b
  • (?<=IP Address: |^ +):正向断言,确保匹配的IP要么紧跟在IP Address: 之后,要么位于一行开头的空格(缩进)之后
  • \b(?:\d{1,3}\.){3}\d{1,3}\b:匹配标准的IP地址格式(若需严格校验IP段0-255的合法范围,可替换为\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)

替换逻辑

将匹配到的IP地址直接替换为some-replaced-value即可,正则会自动保留每行开头的空格(断言仅匹配IP的前置条件,不会把空格纳入匹配内容)。

代码示例(Python)

import re

# 模拟YAML内容(实际场景可从文件读取)
yaml_content = """test-key-1: some_value
test-key-2: 8.23.12.0
test-key-3: some_value
IP Address: 127.0.0.1
 127.0.0.1
 127.0.0.1
 127.0.0.1
test-key-4: test-value"""

# 执行正则替换
pattern = r'(?<=IP Address: |^ +)\b(?:\d{1,3}\.){3}\d{1,3}\b'
result = re.sub(pattern, 'some-replaced-value', yaml_content, flags=re.MULTILINE)

# 输出处理后的内容
print(result)

编辑器快速替换(以VS Code为例)

  1. 打开目标YAML文件,按Ctrl+H调出替换面板
  2. 勾选「正则表达式」和「多行」选项
  3. 查找框输入上述正则,替换框输入some-replaced-value
  4. 点击「全部替换」完成操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:20:23