【问题标题】:splitting a complex line into an array将复杂线拆分为数组
【发布时间】:2012-04-12 22:01:18
【问题描述】:

我有一个数组,其中的元素看起来像这样(包括空格)

@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");

我遇到的问题是数字的空格和大小各不相同。

【问题讨论】:

    标签: perl


    【解决方案1】:

    我会使用只匹配数字的正则表达式:

    #!/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 ) ;
    }
    

    如果字符串开头没有空格,这也可以。

    【讨论】:

    • 非常感谢,这非常适合我的需要,其他选项适用于这个特定示例,但我可能有一个开头没有任何空格的条目。
    【解决方案2】:

    一种方式:

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

    【讨论】:

      【解决方案3】:

      也许像这样更简单易读的东西会有所帮助:

      #!/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
      

      【讨论】:

        【解决方案4】:

        如果你的间距真的是统一的,你可以使用 Perl 的unpack 来获取数据。见http://perldoc.perl.org/perlpacktut.html#Packing-Text

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-04
          • 1970-01-01
          • 2016-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-05
          相关资源
          最近更新 更多