perl提取/匹配字符串中的最后一个浮点数

时间:2014-01-10 16:39:21

标签: regex perl floating-point

需要从下面的字符串中提取最后一个浮点数并保存到变量中。

F791775                (6010.822, 4396.812) (6013.341, 4405.921)   9.451  

预期输出:9.451

使用以下正则表达式

my $inj_spacing = $line =~ m {(\d+.\d+)}x;

但这提取= 1

2 个答案:

答案 0 :(得分:6)

因为正则表达式位于标量上下文中(因为左侧参数是标量),因此得到数字1。它只是一个真值,表示正则表达式匹配。

你想要的是强加一个列表上下文,可以通过添加括号来完成:

my ($inj_spacing) = $line =~ m {(\d+\.\d+)}x;

(你也需要逃避这段时间,正如工具所说)

当然,这也会与第一个可能的时间相匹配,因此您需要将其锚定到最后:

my ($inj_spacing) = $line =~ m {(\d+\.\d+)\s*$}x;

我添加了\s*来考虑可选的空格。如果尾随空格表示最后一列中缺少数据(例如,使用csv数据),则不建议这样做。但对于非正式的文本匹配,它可以防止错误的错配。

答案 1 :(得分:0)

如果您的字符串始终具有该格式,则另一个选项是使用split来获取最后一个fp编号:

use strict;
use warnings;

my $str = 'F791775                (6010.822, 4396.812) (6013.341, 4405.921)   9.451';
my $inj_spacing = ( split ' ', $str )[-1];
print $inj_spacing;

输出:

9.451

希望这有帮助!