我有一个数组,其中元素看起来像这样(包括空格)
@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");
我遇到的问题是数字的空白和大小各不相同。
答案 0 :(得分: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 ) ;
}
如果字符串在开头没有空格,这也可以。
答案 1 :(得分:3)
一种方式:
my ($empty, @array) = split(/\|?\s+/, " 795 0| 1");
答案 2 :(得分:1)
也许更容易和可读的东西可能会有所帮助:
#!/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
答案 3 :(得分:0)
如果你的间距是真正统一的,你可以使用Perl的unpack
来获取数据。见http://perldoc.perl.org/perlpacktut.html#Packing-Text