我想将表单1,2,25-27,4,8,14,7-10的一个串转换为一个实际值的列表:1,2,4,7,8,9,10,14,25,26,27。
我搜索并没有发现做这种扩张的东西。有人知道怎么做才容易吗?
发布于 2013-10-11 15:02:15
my $s = "1,2,25-27,4,8,14,7-10";
my %seen;
my @arr =
sort { $a <=> $b }
grep { !$seen{$_}++ }
map {
my @r = split /-/;
@r>1 ? ($r[0] .. $r[1]) : @r;
}
split /,/, $s;
print "@arr\n";输出
1 2 4 7 8 9 10 14 25 26 27发布于 2013-10-11 15:37:39
另一种快速完成此操作的方法是使用eval的字符串版本。但是,您必须记住,eval的使用具有一定的安全含义,所以在将任何字符串传递给eval之前,最好先对其进行清理。
use strict;
use warnings;
my $string = "1,2,25-27,4,8,14,7-10";
$string =~ s/-/../g;
my @list = sort {$a <=> $b} keys { map {$_, 1} eval $string };
print "@list\n";
#output
1 2 4 7 8 9 10 14 25 26 27 https://stackoverflow.com/questions/19321229
复制相似问题