【问题标题】:How to find location of string in a array ends with %?如何在以 % 结尾的数组中查找字符串的位置?
【发布时间】:2014-08-12 02:22:32
【问题描述】:

我的问题是我有一个带有一些刺的数组

EX: $line = { devtmpfs  8234932  144   8234788  1%  /dev }

@temp_arr=split(" ",$line);

如何搜索具有子字符串 '%' 的字符串,我想将该字符串分配给变量

ie,  My var1 = 1% (according to above case)

提前致谢。

【问题讨论】:

    标签: arrays string perl


    【解决方案1】:

    使用来自List::Util 模块的first

    use List::Util qw(first);
    
    my $line  = q{ devtmpfs  8234932  144   8234788  1%  /dev };
    my $found = first { /\%\z/ } split " ", $line;
    

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解您的问题。

      这样可以吗?

      use strict;
      use warnings;
      
      my @arr = qw(foo ba%r baz%);
      
      my $count = 0;
      
      foreach(@arr){
          chomp;
          $count++;
          my $element = ($count -1);
          print "Element number $element contains '%': $_\n" if /%$/;
      }
      

      这将打印Element number 2 contains '%': baz%,因为在此示例中,它是唯一以% 结尾的字符串

      【讨论】:

        【解决方案3】:

        使用List::MoreUtils 模块。基于this answer

        #!/usr/bin/env perl
        use strict;
        use warnings;
        use List::MoreUtils qw(firstidx);
        
        my $line = "devtmpfs  8234932  144   8234788  1%  /dev";
        my @temp_arr = split(" ",   $line);
        my $i = firstidx { $_ =~ /%$/ } @temp_arr;
        
        printf "String: %s, Index: %i\n", $temp_arr[$i], $i;
        
        __END__
        

        输出:

        String: 1%, Index: 4
        

        【讨论】:

          【解决方案4】:

          你的语法错误。

          $line = { devtmpfs 8234932 144 8234788 1% /dev }

          应该是

          $line = q{ devtmpfs 8234932 144 8234788 1% /dev };

          反正解决办法是

          #!/usr/bin/perl
          use strict;
          use warnings;
          my $line = q|devtmpfs  8234932  144   8234788  1%  /dev|;
          my @temp_arr = split(" ",$line);
          my $var;
          foreach (@temp_arr){
              if($_ =~ /%$/){
                  $var = $_;
              }
          }
          print "Result: $var";
          

          Demo

          【讨论】:

            【解决方案5】:

            或者,使用正则表达式提取百分比:

            my ($percent) = $line =~ /(\d+%)/;
            

            【讨论】:

              【解决方案6】:

              你可以使用grep:

              my $line  = ' devtmpfs  8234932  144   8234788  1%  /dev ';
              my ($found) = grep /\%$/, split ' ', $line;
              

              或者如果你想指定一个默认值,或者如果没有找到该值,则使用正则表达式:

              my $found = $line =~ /(\S*\%)(?!\S)/ ? $1 : warn "Value not found";
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-10-16
                • 1970-01-01
                • 1970-01-01
                • 2021-01-14
                • 1970-01-01
                相关资源
                最近更新 更多