繁体   English   中英

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

[英]perl extract/match last floating point number from string

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

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

预期产量: 9.451

使用以下正则表达式

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

但这提取= 1

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

您想要施加一个列表上下文,可以通过添加括号来实现:

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

(如工具所示,您还需要逃脱句号)

另外,当然,这将与第一个可能的时间匹配,因此您需要将其锚定到末尾:

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

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

如果您的字符串始终采用这种格式,则另一种选择是使用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

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM