例如我有一句话:
“99个国家共有99辆汽车,其中50辆有缺陷。”
我需要找出如何获得99 + 50,所以基本上所有的数字都没有重复的字符串并将它们加在一起。
我知道我应该使用正则表达式从字符串中提取数字,然后将它们拆分并在它们前面放置一个“+”符号,但是我尝试过的所有内容都会让我输入错误的数字用。
答案 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::Util
和List::MoreUtils
use perl5i::2;
# strict and warnings enabled by default
my $sum = [ $sentence =~ /\d+/g ]->uniq->sum;