仅使用正则表达式从 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"
唯一重要的是col
和usa
的位置?
正确! @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 变量的主要内容,如果未能解决你的问题,请参考以下文章