代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

如何在Perl中从字符串中提取数字?

  •  9
  • Aakash Goel  · 技术社区  · 14 年前

    print $str;
    abcd*%1234$sdfsd..#d
    

    字符串总是只有一个连续的数字段,比如 1234 在这种情况下。其余的都是字母或其他特殊字符。

    如何提取号码( 1234 str ?

    This page 建议我使用 \d ,但是怎么做?

    4 回复  |  直到 14 年前
        1
  •  18
  •   Philip Potter    14 年前
    $str =~ s/\D//g;
    

    这将从字符串中删除所有非数字字符。这就是你需要做的。

    $str =~ s/[^0-9]//g;
    
        2
  •  29
  •   FMc TLP    14 年前

    如果不想修改原始字符串,可以使用子模式在regex中捕获数字来提取数字。在列表上下文中,正则表达式返回子模式中定义的匹配项。

    my $str = 'abc 123 x456xy 789foo';
    
    my ($first_num) = $str =~ /(\d+)/;   # 123
    my @all_nums    = $str =~ /(\d+)/g;  # (123, 456, 789)
    
        3
  •  4
  •   Axeman maxelost    14 年前

    如果你想用破坏性的方法,这是最快的方法。

    $str =~ tr/0-9//cd;
    

    tr 翻译中的所有字符 c 0-9 一无所获, d

    这种方法的一个警告是,如果字符串后面还有另一组数字,它们将与第一组数字连接起来。所以不清楚你是否愿意这么做。

    ( $str ) = $str =~ /(\d+)/;
    

    在列表上下文中,匹配返回捕获列表。周围的父母 $str 只需将表达式放在列表上下文中,并将第一个捕获分配给 .

        4
  •  1
  •   Ziggy    14 年前

    就我个人而言,我会这样做:

    $s =~ /([0-9]+)/; 
    print $1;