2013-01-04 23 views
1

我是Perl中的新手。我只想問如何使用正則表達式排除搜索列表中不必要的浮點數。如何從一行字符串中的浮點數匹配中排除不必要的浮點數

我有腳本的這個樣品部分:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $teststring = "delay PADI_DEL,del:0.352, 0.352, 0.376, 0.376 PIO PAD PADDI (PADDI:PADDI IOBUF:::IO_TYPE=SUBLVDS,BANK_VCCIO=2.5); pio_INR_drt"; 

$teststring =~ s/[^\d.\s]//g; 
print "$teststring\n"; 

我希望像這樣的輸出:

0.352 0.352 0.376 0.376 

的提取是正確的,但我得到的最後一個浮點數我追捧不必要的數。使用我的代碼的實際輸出是這樣的:

0.352 0.352 0.376 0.376  2.5 

我將如何修改我的正則表達式,這樣它將無法檢測到「2.5」不必要的浮點數。

感謝您的幫助。

+0

哪裏是'2.5'來自哪裏?你的字符串在它的末尾有'3.3'。 – Barmar

+0

2.5來自$ teststring的後期部分 ... IO_TYPE = SUBLVDS,BANK_VCCIO = 2.5 .... –

+0

當我寫了我的評論時,'$ teststring'的後面部分是'BANK_VCCIO = 3.3'。 @ikegami編輯了這個問題來糾正這個問題。 – Barmar

回答

0

如果你的輸入格式是剛性的,直接抓花車可以像this

#!/usr/bin/perl 

use strict; 
use warnings; 

my $teststring = "delay PADI_DEL,del:0.352, 0.352, 0.376, 0.376 PIO PAD PADDI (PADDI:PADDI IOBUF:::IO_TYPE=SUBLVDS,BANK_VCCIO=3.3); pio_INR_drt"; 

$teststring =~ s/(0\.\d+).*(0\.\d+).*(0\.\d+).*(0\.\d+)//g; 
print "$1 $2 $3 $4\n"; 

這會搜索0.XXX格式的4個浮點數。

+0

感謝此代碼。實際上,你建議的代碼使得我的編碼更容易,因爲在我檢測到浮點數之後,我有一個將每個浮點數賦給數組元素的計劃。 再次感謝。 –

+0

@dennisburton這就是我所想,歡迎你! –

0

可以剝奪父母之內的事情第一,(和前面的空格最後):與陣列

$teststring =~ s/\([^)]*\)//; 
$teststring =~ s/[^\d.\s]//g; 
$teststring =~ s/^\s*//; 

而且同樣的想法來存儲數字:

$teststring =~ s/\([^)]*\).*$//; 
my @v = ($teststring =~ /\d+\.\d+/g); 
print join (" ", @v), "\n"; 
0

如果你的花車總是5個字符長(4個數字和一個點),這regex'll做的伎倆:

s/[\d.]{5}//g; 
+0

他想保留號碼,而不是刪除它們。 – Barmar

2
my @nums = $teststring =~ /[\d.]+/g; 
pop @nums; 
print "@nums\n"; 
相關問題