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

1 regex floating-point perl

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

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

TLP*_*TLP 6

因此,您的正则表达式位于标量上下文中(因为左侧参数是标量),因此您得到数字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数据),则不建议这样做.但对于非正式的文本匹配类型,它可以防止错误的错配.

  • 不会匹配第一个浮动6010.822?我认为应该有和st-end-sting锚:m /(\ d + \.\ d +)$/...为了正确你应该逃避'.' 操作者 (2认同)