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

如何使用正则表达式提取字符串中的多段指定信息?

用正则表达式提取Prometheus标签指定字段

当然可以用正则表达式实现这类需求,以下是具体操作方案:

先明确输入结构

假设你的输入是类似Prometheus的标签字符串,示例如下:

fstype="ext4", instance="node1:9100", mountpoint="/data", job="node_exporter"

核心正则匹配规则

针对fstype、instance、mountpoint这三个字段,我们可以构建正则来精准匹配字段名="值"的结构,同时处理值中可能存在的转义双引号(比如mountpoint="/foo\"bar")。

匹配单个字段的正则

以fstype为例:

fstype="(?:\\.|[^"])*"
  • fstype=:精准匹配字段名前缀
  • ":匹配字段值的起始双引号
  • (?:\\.|[^"])*:匹配字段值内容,其中\\.匹配转义字符(如\"),[^"]匹配非双引号的任意字符,*表示匹配0次或多次
  • ":匹配字段值的结束双引号

一次性匹配所有目标字段的正则

如果需要同时提取三个字段(不管字段在字符串中的顺序),可以用这个正则:

(?:^|,\s+)(fstype|instance|mountpoint)="((?:\\.|[^"])*)"
  • (?:^|,\s+):匹配字符串开头,或者逗号加任意数量空格(兼容不同格式的分隔符)
  • (fstype|instance|mountpoint):捕获目标字段的名称
  • "((?:\\.|[^"])*)":捕获对应字段的值

代码示例(Python)

用Python的re模块实现提取:

import re

# 示例输入字符串
input_str = 'fstype="ext4", instance="node1:9100", mountpoint="/data/foo\"bar", job="node_exporter"'

# 匹配正则
pattern = r'(?:^|,\s+)(fstype|instance|mountpoint)="((?:\\.|[^"])*)"'
matches = re.findall(pattern, input_str)

# 整理为字典格式,还原转义的双引号
result = {key: value.replace('\\"', '"') for key, value in matches}
print(result)

输出结果:

{'fstype': 'ext4', 'instance': 'node1:9100', 'mountpoint': '/data/foo"bar'}

注意事项

  • 如果输入的标签分隔符只有单个空格,可把正则中的\s+改为 ,提升匹配效率
  • 如果需要处理多行的标签字符串,可在re.findall中添加re.DOTALL标志
  • 对于其他编程语言(如Go、Java),正则逻辑一致,只需调整对应的正则API调用方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:05:18