我将如何修剪和拆分为perl哈希

时间:2014-11-06 00:03:30

标签: perl hash split

我有这个字符串

$st="station_1:50, station_2:40, station_3:60";

我如何将其拆分为Perl哈希表?

我试试

%hash = map{split /\:/, $_}(split /, /, $st); 

它确实正确 - 但如果在和站之间有n空格怎么办? 我该如何制作它以消除所有领先空间?

2 个答案:

答案 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'
        };