首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl -将数值/范围的字符串转换为实际值。

perl -将数值/范围的字符串转换为实际值。
EN

Stack Overflow用户
提问于 2013-10-11 14:54:59
回答 2查看 330关注 0票数 2

我想将表单1,2,25-27,4,8,14,7-10的一个串转换为一个实际值的列表:1,2,4,7,8,9,10,14,25,26,27

我搜索并没有发现做这种扩张的东西。有人知道怎么做才容易吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-11 15:02:15

代码语言:javascript
复制
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";

输出

代码语言:javascript
复制
1 2 4 7 8 9 10 14 25 26 27
票数 5
EN

Stack Overflow用户

发布于 2013-10-11 15:37:39

另一种快速完成此操作的方法是使用eval的字符串版本。但是,您必须记住,eval的使用具有一定的安全含义,所以在将任何字符串传递给eval之前,最好先对其进行清理。

代码语言:javascript
复制
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   
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19321229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档