需要从下面的字符串中提取最后一个浮点数并保存到变量中。
F791775 (6010.822, 4396.812) (6013.341, 4405.921) 9.451
预期输出:9.451
使用以下正则表达式
my $inj_spacing = $line =~ m {(\d+.\d+)}x;
但这提取= 1
答案 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
希望这有帮助!