我的弦:
DATADOG [ALERT:cpu] [VENDOR:rancher-2] [ENV:np] [CLUSTER:local-oma2] [HOST:servername1]我的目标是:
我对每个括号中的值感兴趣。所以:
我有一个正则表达式,它似乎可以选择我需要的东西,但是我无法使用它来选择我想要的某些值。判断力
(?<=:).+?(?=])我想要这样的东西
(?<=:).+?(?=]){1}返回cpu和
(?<=:).+?(?=]){2}返回rancher-2和
(?<=:).+?(?=]){3}返回np等等。
任何帮助都将不胜感激!
发布于 2020-05-12 04:24:14
我假设正则表达式的一个函数是确认每个匹配的冒号前面有一个左括号,后面跟着一个大写单词。
您可以使用以下正则表达式来匹配感兴趣的文本。
\[[A-Z]+:\K[^\]]+(?=\])PCRE引擎执行以下操作。
\[ 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)。对于这些语言,可以使用以下正则表达式。
(?<=\[[A-Z]+:)[^\]]+(?=\])发布于 2020-05-12 04:28:17
简单正则表达式:(.*?)]‘。你可以得到你想要的结果的列表。
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”
https://stackoverflow.com/questions/61742736
复制相似问题