【问题标题】:Subtract pattern matching from array element perl从数组元素中减去模式匹配 perl
【发布时间】:2014-03-12 15:51:39
【问题描述】:

我编写了一个代码,如果它与特定模式匹配,我可以从数组中的一个元素中减去一个特定值(例如:FP=0.021)。这是代码:

if ($info =~ /FP=/) {
            my @array1 = split(';', $info);
                if ($array1[$#array1] =~ /=([^.]*)/){
                    my $name1= $-[1];
                    $FPvalue = substr($array1[$#array1], $name1);
                    if ($FPvalue < 0.0001){ 
                        push(@FPvalues,$FPvalue);

其中 $info 是一个字符串,其中包含由分号字符 (;) 分隔的信息。

我很幸运,“FP=0.021”元素是我数组中的最后一个元素。但我想知道一种不使用表达式来减去它的方法:$array1[$#array1]

感谢您的帮助,谢谢!

【问题讨论】:

  • 好吧,一种方法是将其从数组的堆栈中弹出,尽管这确实是一种廉价的技巧,并且仅适用于摆脱“最后一个”元素的这种情况。

标签: regex arrays perl pattern-matching subtraction


【解决方案1】:

没有样本输入数据很难说,但我想你想要

push @FPvalues, $1 if $info =~ /FP=([\d.]+)/

它的工作原理是在$info 中的字符串中搜索FP= 后跟多个点和十进制数字的序列。如果找到该模式,则将点和数字部分放入$1 并推送到数组中。

【讨论】:

    【解决方案2】:

    这里你可以如何从字符串中解析十进制数,因为它位于字符串的末尾:

    $str = "asdsa;adsasd;adsasd;FP=0.021";
    if($str =~ /=(\d+\.?\d+)$/){
        print $1;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多