需要从下面的字符串中提取最后一个浮点数并保存到变量中.
F791775 (6010.822, 4396.812) (6013.341, 4405.921) 9.451
Run Code Online (Sandbox Code Playgroud)
预期产量: 9.451
使用以下正则表达式
my $inj_spacing = $line =~ m {(\d+.\d+)}x;
Run Code Online (Sandbox Code Playgroud)
但是这个摘录= 1
因此,您的正则表达式位于标量上下文中(因为左侧参数是标量),因此您得到数字1.它只是一个真正的值,表示正则表达式匹配.
你想要的是强加一个列表上下文,可以通过添加括号来完成:
my ($inj_spacing) = $line =~ m {(\d+\.\d+)}x;
Run Code Online (Sandbox Code Playgroud)
(你也需要逃避这段时间,正如工具所说)
当然,这也会匹配第一个可能的时间,因此您需要将其锚定到最后:
my ($inj_spacing) = $line =~ m {(\d+\.\d+)\s*$}x;
Run Code Online (Sandbox Code Playgroud)
我添加\s*了可选空格的帐户.如果尾随空格指示最后一列中缺少数据(例如,使用csv数据),则不建议这样做.但对于非正式的文本匹配类型,它可以防止错误的错配.