正则表达式和 Grafana:排除和字符串切割
Regexp & Grafana: exclusions and string cut
我正在使用 Grafana 和 Prometheus 创建一些图表,但我认为这基本上是一个正则表达式(RE2?)问题。我正在动态创建一个元素列表并填充一个变量(label_values(source)
的查询,其中 "source" 包含可能结果的列表)。查询 return 是一个这样的列表:
udr_foo
udr_owls
dns-baz1
dns-baz399
rpz_c_1.donotuse
rpz_c_1.memosis
rpz_c_1.argylesocks
rpz_c_1.argylesocks3
rpz_c_1.argylesocks_http2
我无法修改数据库中的数据;我必须 trim 用正则表达式把它记下来。目前,我有这个 RE2 正则表达式,我把它放在一起,我应用到列表中做一些排除:
/^(?!dns|udr|rpzlog_c_1.donotuse).*/
这给了我部分有用的结果,因为它排除了我不想要的结果:
rpz_c_1.memosis
rpz_c_1.argylesocks
rpz_c_1.argylesocks3
rpz_c_1.argylesocks_http2
问题:我如何修改该正则表达式,以便通过同时剥离前导 "rpz_c_1." 字符串组件来为我提供更简洁的结果集? 因为这是嵌入的在 Grafana 工具中,我不能 "pipe" 多个 regexp 实例化和 shell - 我只有一个 regexp 机会来修改结果。这是我想要 returned:
的一组结果
memosis
argylesocks
argylesocks3
argylesocks_http2
我的正则表达式可能很糟糕。一种更简洁的看待方式可能是:
- return 所有包含 "rpz_c_1." 作为字符串开头的结果
- EXCEPT 包含字符串 "donotuse"
- 然后从每个字符串的开头去掉 "rpz_c_1."
您可以通过使用 rpz_c_1.
开始匹配来简化否定前瞻 在匹配点之后,断言右边的不是 donotuse
如果是这种情况,使用 \S+
使用匹配 1+ 个非空白字符的捕获组,因为使用 .*
将匹配除换行符之外的任何字符 0+ 次。
^rpz_c_1\.(?!donotuse)(\S+)
我正在使用 Grafana 和 Prometheus 创建一些图表,但我认为这基本上是一个正则表达式(RE2?)问题。我正在动态创建一个元素列表并填充一个变量(label_values(source)
的查询,其中 "source" 包含可能结果的列表)。查询 return 是一个这样的列表:
udr_foo
udr_owls
dns-baz1
dns-baz399
rpz_c_1.donotuse
rpz_c_1.memosis
rpz_c_1.argylesocks
rpz_c_1.argylesocks3
rpz_c_1.argylesocks_http2
我无法修改数据库中的数据;我必须 trim 用正则表达式把它记下来。目前,我有这个 RE2 正则表达式,我把它放在一起,我应用到列表中做一些排除:
/^(?!dns|udr|rpzlog_c_1.donotuse).*/
这给了我部分有用的结果,因为它排除了我不想要的结果:
rpz_c_1.memosis
rpz_c_1.argylesocks
rpz_c_1.argylesocks3
rpz_c_1.argylesocks_http2
问题:我如何修改该正则表达式,以便通过同时剥离前导 "rpz_c_1." 字符串组件来为我提供更简洁的结果集? 因为这是嵌入的在 Grafana 工具中,我不能 "pipe" 多个 regexp 实例化和 shell - 我只有一个 regexp 机会来修改结果。这是我想要 returned:
的一组结果memosis
argylesocks
argylesocks3
argylesocks_http2
我的正则表达式可能很糟糕。一种更简洁的看待方式可能是:
- return 所有包含 "rpz_c_1." 作为字符串开头的结果
- EXCEPT 包含字符串 "donotuse"
- 然后从每个字符串的开头去掉 "rpz_c_1."
您可以通过使用 rpz_c_1.
开始匹配来简化否定前瞻 在匹配点之后,断言右边的不是 donotuse
如果是这种情况,使用 \S+
使用匹配 1+ 个非空白字符的捕获组,因为使用 .*
将匹配除换行符之外的任何字符 0+ 次。
^rpz_c_1\.(?!donotuse)(\S+)