簡體   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