Как я могу извлечь цифры в конце строки, используя Perl? - PullRequest
1 голос
/ 16 января 2010

У меня есть строка вида:

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

В конце он содержит восемь цифр. Между цифрами могут быть пробелы, но в конце всегда есть восемь цифр. Как мы получаем каждую из этих цифр отдельно, используя Perl?

Ответы [ 7 ]

6 голосов
/ 16 января 2010

Получить ввод:

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];
3 голосов
/ 16 января 2010

избавиться от нецифровых чисел и затем взять подстроку со спины

$string="jflsdlf f fas253k46l ;sf635jsf sd;lfwio sfkljflsk-=fsd f 24461 425   ";
$string =~ s/[^[:digit:]]//g;
print substr ( $string ,-8);
3 голосов
/ 16 января 2010

Концептуально проще всего сделать шаг нормализации к строке перед извлечением цифр.В примере, который вы показали, это может быть так же просто, как сначала удалить все пробелы.Если вам понадобится строка позже, я сделаю это для копии.Получив нормализованную копию, просто возьмите восемь цифр в конце:

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 голосов
/ 16 января 2010

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

должен это сделать. не забудьте убрать пробелы в каждом из снимков.

1 голос
/ 02 марта 2010

Вы можете использовать следующий код

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";
1 голос
/ 17 января 2010

Вот решение, которое должно работать с любым входом

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
}
0 голосов
/ 16 января 2010
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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...