我有这个字符串
$st="station_1:50, station_2:40, station_3:60";
我如何将其拆分为Perl哈希表?
我试试
%hash = map{split /\:/, $_}(split /, /, $st);
它确实正确 - 但如果在和站之间有n空格怎么办? 我该如何制作它以消除所有领先空间?
答案 0 :(得分:2)
如果可能有空格,可能会有/, ?/
而不是/, /
。如果可能有任意数量的空格,请使用/, */
。
答案 1 :(得分:1)
使用您的代码的解决方案(将\s*
添加到第二个split
):
perl -we '
my $_ = "station_1:50, station_2:40, station_3:60";
my %hash = map {split /:/} split /,\s*/;
use Data::Dumper;
print Dumper \%hash
'
输出:
$VAR1 = {
'station_1' => '50',
'station_3' => '60',
'station_2' => '40'
};
使用正则表达式的另一种工作方式:
CODE
$ echo "station_1:50, station_2:40, station_3:6" |
perl -MData::Dumper -lne '
my %h;
$h{$1} = $2 while /\b(station_\d+):(\d+)/ig;
print Dumper \%h
'
示例输出
$VAR1 = {
'station_3' => '6',
'station_1' => '50',
'station_2' => '40'
};