仅使用正则表达式从 long strong 中检索第 12 到第 14 个字符 - Grafana 变量

Posted

技术标签:

【中文标题】仅使用正则表达式从 long strong 中检索第 12 到第 14 个字符 - Grafana 变量【英文标题】:Retrieving the 12th through 14th characters from a long strong using ONLY regex - Grafana variable 【发布时间】:2021-11-26 04:53:11 【问题描述】:

我有一个小问题,我正在尝试使用正则表达式从长字符串中获取特定字符,但我遇到了麻烦。

工作流程

Prometheus --> Grafana --> 变量(使用正则表达式)

我无法使用除正则表达式之外的任何东西来实现此结果

我目前正在使用这个表达式从一些 json 输出中获取长字符串:

.*channel_id="(.*?)".*

从这里

account_id="XXXXXXX-xxxx-xxxx-xxxx-xxxxxxxxxx",account_name="testalpha",channel_id="s0022110430col0901241usa",channel_abbr="s0022109430col 

这将返回一个总是 24 个字符长的字符串:

s0022110430col0901241usa

问题:

我需要抓住 3 个字母 'col' 和 'usa' 因为他们是正在比赛的两支球队,理想情况下我可以通过管道从第一个正则表达式中获取这些值(位置是关键,因为第一个值总是第 12-14 个字符,第二个值是最后 3 个字符)如果我可以用大写的字符串“vs”输出这些值以创建一个字符串,例如:

COL 与美国

ARG 与 BRA

我愿意接受任何人可能提出的任何建议

谢谢!

PS - 大写的东西是“很高兴拥有”但不需要

【问题讨论】:

所以,从这里:channel_id="s0022110430col0901241usa" 唯一重要的是colusa 的位置? 正确! @LombardiD 【参考方案1】:

我还在学习 RegEx,所以我能想到的只有这些:

col(一线队):

(?<=(channel_id=".11))\w3

对于usa(二队):

(?<=(channel_id=".21))\w3

【讨论】:

(据我所知) - 您需要找到其他方法在输出中添加“vs”,但您可能只能使用正则表达式将它们大写【参考方案2】:

你能定义channel_id吗?

它以“s”开头,然后是许多数字。如果它们总是数字,你可以使用这个正则表达式:

channel_id=".[0-9]+([a-z]+)[0-9]+([a-z]+)

您将获得 2 个组,一组为“col”,另一组为“usa”。

编辑: 或者,如果您只是知道,您始终具有相同的大小,您可以使用以下内容:

channel_id=".11([a-z]+).7([a-z]+)

【讨论】:

为了理智,我会使用'+',而不是'*' 谢谢。我将其替换为+

以上是关于仅使用正则表达式从 long strong 中检索第 12 到第 14 个字符 - Grafana 变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP preg_replace - 正则表达式

如何使用正则表达式规则从 json 数据响应中检索值?

使用正则表达式从对象中检索值 - JS [关闭]

使用正则表达式仅选择带有错误代码 (-) 的行并忽略其他行

仅使用 python 正则表达式从最新的字符串中获取

正则表达式仅从字符串中获取 NUMBER