用regex分别计算每个数字?

问题描述 投票:0回答:1

我的代码是这样的。

#!/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我应该如何修改regex来分别计算整数?

regex perl int
1个回答
0
投票

要捕获所有的数字,作为单个元素,你可以这样做。

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

如果你想只捕获完全是数字的行的数字,你可以添加一个grep:

my @matches = map /([0-9])/, grep /^[0-9]+\z/, @list;

0
投票

你在评论中已经解释了你想问的是如何从输入中提取数字

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

从你的问题中可以推测出,你也想对它们进行计数。这只是一个在标量上下文中评估数组的问题。

my $num_digits = @digits;
say "There are $num_digits digits: @digits";

0
投票

只要把整个文件读到变量中,用regex分别提取每个数字到一个数组中。

然后用 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
© www.soinside.com 2019 - 2024. All rights reserved.