从日志文件中提取数字

时间:2016-02-19 09:31:38

标签: regex parsing powershell

我试图从输出文本行的日志文件中提取数字,如下所示:

1/11/2016 3:26:12 AM 1/11/2016 3:27:00 AM 45.6 A

该行的输出为45.6 A

然而,我的正则表达式代码从凌晨3:26:12返回12 A.我需要它完全忽略时间数,只输出45.6 A.

这是我的正则表达式代码:

$regex = '\d+(?:\.\d+)?(?=\s+A)'

3 个答案:

答案 0 :(得分:2)

你只是忘了将lookeahead固定在字符串的末尾:

\d+(?:\.\d+)?(?=\s+A$)
                    ^

请参阅regex demo

\d+(?:\.\d+)?将匹配一个或多个数字,可选地后跟一个.后跟一个或多个数字(浮点值),(?=\s+A$)前瞻将需要一个或多个空格字符串末尾的A字符出现在浮点值之后。

$s = '1/11/2016 3:26:12 AM 1/11/2016 3:27:00 AM 45.6 A'
$rx = '\d+(?:\.\d+)?(?=\s+A$)'
$result = [regex]::Match($s, $rx, 'RightToLeft')
if ($result) { $result.Value; }

enter image description here

答案 1 :(得分:1)

您可以使用word boundary (\b)仅匹配A,而不是AM

\d+(?:\.\d+)?(?=\s+A\b)

DEMO:https://regex101.com/r/pA7jK2/1

答案 2 :(得分:0)

如果您只是需要找到包含A的最后一位数字,请尝试此

(\d+\.\d\sA)

演示here