Посчитать каждое число отдельно с помощью регулярного выражения? - PullRequest
0 голосов
/ 03 мая 2020

Мой код выглядит так:

#!/usr/bin/perl

use strict;
use warnings;

my @list = <>;
chomp(@list);
my @matches =grep /^\d+(,\d+)*$/, @list;
if (@matches>0)
{
    print scalar @matches . "\n";
}
else {

}

И ввод такой:

sd 45
gdfg 34
fg dfg 345 df

Затем он должен напечатать 7 Но он печатает 3 Как я должен изменить регулярное выражение для подсчета целых чисел отдельно?

Ответы [ 3 ]

0 голосов
/ 03 мая 2020

Чтобы захватить все цифры, как отдельные элементы, вы должны сделать:

my @matches = map /([0-9])/, @list;

Если вы хотите захватить цифры только для строк, которые являются полностью цифрами, вы должны добавить grep:

my @matches = map /([0-9])/, grep /^[0-9]+\z/, @list;
0 голосов
/ 03 мая 2020

Просто прочитайте весь файл в переменную, используйте regex для извлечения каждого di git отдельно в массив.

Затем выведите число цифр с помощью scalar @digits, и если вы хотите увидеть список цифр, то join ', ', @digits поможет получить список цифр в удобной для понимания форме.

use strict;
use warnings;
use feature 'say';

my $file = do { local $/; <DATA> };

my @digits = $file =~ /(\d)/g;

say 'Counted ' . scalar @digits . ' digits';
say 'List: ' . join ', ', @digits;

__DATA__
sd 45
gdfg 34
fg dfg 345 df

Вывод

Counted 7 digits
List: 4, 5, 3, 4, 3, 4, 5
0 голосов
/ 03 мая 2020

Вы пояснили в комментариях, что спрашиваете, как извлечь цифры из вашего ввода.

my @digits;
while (my $line = <>) {
   push @digits, $line =~ /\d/g;
}

Из вашего вопроса можно догадаться, что вы также хотите их подсчитать. Это просто вопрос оценки массива в скалярном контексте.

my $num_digits = @digits;
say "There are $num_digits digits: @digits";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...