如何使用Perl在字符串末尾提取数字?

时间:2010-01-16 13:53:36

标签: perl

我有一个表格的字符串:

"jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425   "

最后它包含八位数字。数字之间可能有空格,但最后总共有八位数字。我们如何使用Perl分别获得这些数字?

7 个答案:

答案 0 :(得分:6)

获取输入:

my $input = "jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425   ";

现在,提取所有数字:

my @all_digits = $input =~ /(\d)/g;

现在,从中获取最后8个:

my @last_8_digits = @all_digits[-8..-1];

答案 1 :(得分:3)

概念上最简单的做法是在提取数字之前对字符串应用规范化步骤。在您展示的示例中,这可能就像首先删除所有空格一样简单。如果您以后需要字符串,我会将其复制到副本中。获得标准化副本后,只需抓住末尾的八位数字:

my $string = "jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425   ";
my $copy = $string;

$copy =~ s/\s+//g; # "normalize" string

my @digits;
if( $copy =~ m/(\d{8})\z/ ) 
    {
    @digits = split //, $1
    }

print "digits are @digits\n";

答案 2 :(得分:3)

摆脱非数字,然后从后面获取子串

$string="jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425   ";
$string =~ s/[^[:digit:]]//g;
print substr ( $string ,-8);

答案 3 :(得分:2)

/(\d\s*){8}$/

应该这样做。不要忘记删除每个捕获中的空白。

答案 4 :(得分:1)

这是一个适用于任何输入的解决方案

my $input = "dlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425   ";

if  ($input =~ /((?:\d\s*){8})$/) {  # grab last 8 digits and any space

    my @nums = split /\s+|/ => $1;   # throw away space and separate each digit

    print "@nums\n";  # 2 4 4 6 1 4 2 5
}

答案 5 :(得分:1)

您可以使用以下代码

my $string="jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425   ";
 my @array=split(/ / , $string);
 print "$array[$#array-1]";
 print "$array[$#array]\n";

答案 6 :(得分:-2)

if (m/(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*$/) {
    ($d1, $d2, $d3, $d4, $d5, $d6, $d7, $d8) = ($1, $2, $3, $4, $5, $6, $7, $8);
}