У меня есть строка вида:
"jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425 "
В конце он содержит восемь цифр. Между цифрами могут быть пробелы, но в конце всегда есть восемь цифр. Как мы получаем каждую из этих цифр отдельно, используя Perl?
Получить ввод:
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];
избавиться от нецифровых чисел и затем взять подстроку со спины
$string="jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425 "; $string =~ s/[^[:digit:]]//g; print substr ( $string ,-8);
Концептуально проще всего сделать шаг нормализации к строке перед извлечением цифр.В примере, который вы показали, это может быть так же просто, как сначала удалить все пробелы.Если вам понадобится строка позже, я сделаю это для копии.Получив нормализованную копию, просто возьмите восемь цифр в конце:
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";
/(\d\s*){8}$/
должен это сделать. не забудьте убрать пробелы в каждом из снимков.
Вы можете использовать следующий код
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";
Вот решение, которое должно работать с любым входом
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 }
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); }