2012-04-11 35 views
0

我有一個陣列,其中的元素如下所示(包括空格)分裂複雜的線路到一個數組

@array = (
" 795  0| 1", 
"  5 135| 17", 
"  12 161| 17", 
" 244 22| 17", 
"  11 25| 17", 
" 249 389| 17", 
" 22383 443| 17" 
); 

我需要採取的元件出

" 795  0| 1" 

,並將其分成3數字擺脫空白和「|」在每一行中。

@new_array =("795","0","1"); 

我遇到的問題是數字的空格和大小各不相同。

回答

4

我會使用一個正則表達式匹配只有編號:

#!/usr/bin/perl 

use strict ; 
use warnings ; 
use Data::Dumper ; 

my @array = (
" 795  0| 1", 
"  5 135| 17", 
"  12 161| 17", 
" 244 22| 17", 
"  11 25| 17", 
" 249 389| 17", 
" 22383 443| 17" 
); 

foreach my $item (@array) { 
    my @tmp = $item =~ m/(\d+)/g ; 
    printf "'%s' => %s\n" , $item , Dumper(\@tmp) ; 
} 

這也將工作如果字符串的開頭沒有空格。

+0

多謝這完全適用於我所需要的,其他的選項會工作有了這個具體的例子,但是我有可能會有一個入口在開始時沒有任何空格。 – stupidking 2012-04-11 21:33:29

2

方式一:

my ($empty, @array) = split(/\|?\s+/, " 795  0| 1"); 
0

或許一些輕鬆和可讀性這樣可以幫助:

#!/usr/bin/perl 

use strict; 
use warnings; 

my @array = (
" 795  0| 1", 
"  5 135| 17", 
"  12 161| 17", 
" 244 22| 17", 
"  11 25| 17", 
" 249 389| 17", 
" 22383 443| 17" 
); 

my $eggs; 

for my $spam (@array) { 
    chomp $spam; 
    $spam =~ s/^\s*//; 
    push @$eggs, [ split (/\|?\s+/, $spam) ]; 
} 

for my $egg (@$eggs) { 
    print join (", ", @$egg); 
    print "\n"; 
} 

,其結果是:

795, 0, 1 
5, 135, 17 
12, 161, 17 
244, 22, 17 
11, 25, 17 
249, 389, 17 
22383, 443, 17