我有一个表格的字符串:
"jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425 "
最后它包含八位数字。数字之间可能有空格,但最后总共有八位数字。我们如何使用Perl分别获得这些数字?
答案 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);
}