regex 在特定位置查找IP地址的正则表达式

qpgpyjmq  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个yaml文件,其中有IP地址作为值与IP地址作为关键字字符串。有时该值可能有多个IP的每一个新行。有一些其他键:值对在这个文件中的值也有类似的格式IP地址(x.x.x.x),但作为关键字不是IP地址,我不想认为这是匹配的IP地址正则表达式。下面是一个样本yaml文件,其中我只想找到/匹配正则表达式的IP地址只与关键字有IP地址,其值跨越多行。

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

如上面示例yaml文件所示,test-key-2具有与IP地址类似格式匹配的值。但我只想匹配IP地址并将其替换为某个测试值。因此,预期输出应如下所示,其中所有IP地址都替换为“some-replaced-value”,但即使test-key-2的值与IP地址类似格式匹配,它也不会更改。当用替换文本替换多行IP地址时,必须保留每行开头的空格,因为它是多行值的有效yaml格式。

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
ppcbkaq5

ppcbkaq51#

因为您有一些值是有效的IP地址,所以在我看来,您似乎需要一个YAML解析器作为第一轮,首先提取您感兴趣的键-值对(或排除您不感兴趣的字段),然后只对结果进行操作
我不是一个golang用户,但这似乎很相关Golang Map YAML Objects
我猜想你的程序会采取这样的形式

read yaml file

for each key-value pair
  if the key name is "IP Address"
    split the string
      replace each matching member (also error for non-matching?)

在转换时,使用专用的IP解析器也可能更好,因为它可能由net提供,而不是regex,后者可能具有额外的功能(例如,如果地址是本地的,则提供一些琐碎的功能,或者处理IPv6)

相关问题