首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图构建可用于匹配第n个值的正则表达式。

试图构建可用于匹配第n个值的正则表达式。
EN

Stack Overflow用户
提问于 2020-05-12 02:27:34
回答 2查看 58关注 0票数 0

我的弦:

代码语言:javascript
复制
DATADOG [ALERT:cpu] [VENDOR:rancher-2] [ENV:np] [CLUSTER:local-oma2] [HOST:servername1]

我的目标是:

我对每个括号中的值感兴趣。所以:

  • cpu
  • 牧场主-2
  • np
  • 局部-oma2 2
  • servername1

我有一个正则表达式,它似乎可以选择我需要的东西,但是我无法使用它来选择我想要的某些值。判断力

代码语言:javascript
复制
(?<=:).+?(?=])

我想要这样的东西

代码语言:javascript
复制
(?<=:).+?(?=]){1}

返回cpu

代码语言:javascript
复制
(?<=:).+?(?=]){2}

返回rancher-2

代码语言:javascript
复制
(?<=:).+?(?=]){3}

返回np等等。

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-12 04:24:14

我假设正则表达式的一个函数是确认每个匹配的冒号前面有一个左括号,后面跟着一个大写单词。

您可以使用以下正则表达式来匹配感兴趣的文本。

代码语言:javascript
复制
\[[A-Z]+:\K[^\]]+(?=\])

PCRE演示

PCRE引擎执行以下操作。

代码语言:javascript
复制
\[        match '['
[A-Z]+:   match 1+ uppercase letters followed by ':'
\K        forget everything matched so far
[^\]]+    match 1+ chars other than ']'
(?=\])    the following character must be ']'

如果您想要一个特定的匹配,如示例中的"ENV:"后面的匹配,则将regex中的[A-Z]+:替换为ENV:

\K重置报告的匹配的起点。它可以在各种语言中使用。此外,R的引擎(带有perl=TRUE)和Python的替代"regex“模块也支持它。

有些不支持\K的语言支持可变长度查找(例如,.NET和Javascript)。对于这些语言,可以使用以下正则表达式。

代码语言:javascript
复制
(?<=\[[A-Z]+:)[^\]]+(?=\])

演示

票数 0
EN

Stack Overflow用户

发布于 2020-05-12 04:28:17

简单正则表达式:(.*?)]‘。你可以得到你想要的结果的列表。

代码语言:javascript
复制
    import re
    s = 'DATADOG [ALERT:cpu] [VENDOR:rancher-2] [ENV:np] [CLUSTER:local-oma2] [HOST:servername1]'
    result = re.findall(':(.*?)]',s)
    print(result)

输出:

“‘cpu”、“rancher-2”、“np”、“local-oma2 2”、“servername1”

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

https://stackoverflow.com/questions/61742736

复制
相关文章

相似问题

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