如果字符串包含 "X",则捕获数字,但限制匹配(不能使用组)

Capture number if string contains "X", but limit match (cannot use groups)

我需要从包含单词 output:

的字符串中提取像 2.268 这样的数字

Approxmiate output size of output: 2.268 kilobytes

但在不存在的字符串中忽略它:

some entirely different string: 2.268 kilobytes

这个正则表达式:

(?:output.+?)([\d\.]+)

给我一个与 1 组的匹配,目标字符串的组是 2.268。但是由于我使用的不是编程语言而是 CloudWatch Log Insights,我需要一种方法来仅匹配数字本身而不使用组。

我可以使用正后视 ?<= 以便根本不使用字符串,但是我不知道如何在不使用 .+ 的情况下丢弃 size of output: ,正后视不允许。

由于您使用的是 PCRE,因此您可以使用

output.*?\K\d[\d.]*

参见regex demo。这匹配

  • output - 固定字符串
  • .*? - 除换行字符外的任何零个或多个字符,尽可能少
  • \K - 匹配重置运算符,从整个匹配内存缓冲区中删除到目前为止匹配的所有文本
  • \d - 一个数字
  • [\d.]* - 零个或多个数字或句点。

使用您展示的示例,请尝试使用正则表达式。

output:\D+\K\d(?:\.\d+)?

Online demo for above regex

解释: 为以上添加详细解释。

output:\D+    ##Matching output colon followed by non-digits(1 or more occurrences)
\K            ##\K to forget previous matched values to make sure we get only further matched values in this expression.
\d(?:\.\d+)?  ##Matching digit followed by optional dot digits.