首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regexp & Grafana:排他性和字符串切割

Regexp & Grafana:排他性和字符串切割
EN

Stack Overflow用户
提问于 2020-05-15 16:39:37
回答 1查看 9.4K关注 0票数 0

我正在使用Grafana和Prometheus创建一些图表,但我认为这基本上是一个regexp (RE2?)有个问题。我正在动态地创建一个元素列表并填充一个变量(查询label_values(source),其中"source“包含可能的结果列表)。查询返回如下列表:

代码语言:javascript
复制
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

我不能修改数据库中的数据;我必须用regexp来减少它。目前,我有一个RE2 regexp,我把它拼凑在一起,应用到列表中去做一些排除:

/^(?!dns|udr|rpzlog_c_1.donotuse).*/

这给了我一个部分有用的结果,因为它排除了我不想要的结果:

代码语言:javascript
复制
rpz_c_1.memosis
rpz_c_1.argylesocks
rpz_c_1.argylesocks3
rpz_c_1.argylesocks_http2

问题:,我将如何修改这个正则表达式,以便通过去掉前面的“rpz_c_1”,给出一个更简洁的结果集。string组件?,因为这是嵌入在Grafana工具中的,所以我不能将多个regexp实例化与一个shell一起“管道”--我只有一个regexp机会来修改结果。这是我希望返回的一组结果:

代码语言:javascript
复制
memosis
argylesocks
argylesocks3
argylesocks_http2

我的经验可能很糟糕。一种更简洁的看待这一问题的方法可能是:

  • 返回包含“rpz_c_1”的所有结果。作为字符串的开头
  • 除非任何包含字符串"donotuse“的
  • 然后去掉“rpz_c_1”从每个字符串的开头
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-15 20:08:13

您可以通过在匹配点之后用rpz_c_1.启动匹配来简化负面展望,断言右边的不是donotuse

如果是这样的话,使用一个与1+非空格字符匹配的捕获组,使用\S+,因为使用.*将匹配除换行符0+时间以外的任何字符。

代码语言:javascript
复制
^rpz_c_1\.(?!donotuse)(\S+)

Regex演示

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61824254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档