如何从文本文件中仅提取数字(无重复项)并找到总和?

时间:2014-06-17 09:19:24

标签: regex string perl sum

例如我有一句话:

“99个国家共有99辆汽车,其中50辆有缺陷。”

我需要找出如何获得99 + 50,所以基本上所有的数字都没有重复的字符串并将它们加在一起。

我知道我应该使用正则表达式从字符串中提取数字,然后将它们拆分并在它们前面放置一个“+”符号,但是我尝试过的所有内容都会让我输入错误的数字用。

3 个答案:

答案 0 :(得分:5)

对于整数:

use List::Util 'sum';
use List::MoreUtils 'uniq';

my $total = sum( uniq( $sentence =~ /\d+/g ) );

答案 1 :(得分:2)

使用List :: Util中的sum对数字求和。使用哈希来获取唯一数字列表。

#!/usr/bin/perl
use warnings;
use strict;

use List::Util qw{ sum };

my $string = 'There are 99 cars in over 99 countries, 50 of which are defective.';
my %nums;
undef $nums{$1} while $string =~ /([0-9]+)/g;
print sum(keys %nums), "\n";

答案 2 :(得分:1)

使用更多OO方法,但perl5i

基本上包裹List::UtilList::MoreUtils
use perl5i::2;
# strict and warnings enabled by default

my $sum = [ $sentence =~ /\d+/g ]->uniq->sum;