如果字符串包含 "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+)?
解释: 为以上添加详细解释。
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.
我需要从包含单词 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+)?
解释: 为以上添加详细解释。
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.