在字符串或数组中拉出一组范围

时间:2013-05-08 19:43:46

标签: perl

我有一个数组和一个可能会改变的组值:

@array = ("The","quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog");
$group = 3;

我想要回归的结果是:

The
The quick
The quick brown

quick
quick brown
quick brown fox

换句话说,从第一个元素开始将单词分组到$ group value。我想迭代字符串字边界(或数组元素)来收集这些组合。我尝试了各种正则表达式组合,切片和移位但没有成功。我认为我需要一套正则表达式&转移(或MAP [在我的头上])。

对建筑物的任何建议表示赞赏!

1 个答案:

答案 0 :(得分:4)

在数组中获得数据后,解决方案非常简单:

use List::Util qw/min/;
use 5.010;
my @words = (...);
my $group = 3;

for my $i (0 .. $#words) {
  # finding the maximum index for the slice
  for my $j ($i .. min($i + $group - 1, $#words)) {
    say join " ", @words[$i .. $j];
  }
}

如果在你的问题中没有指定少于$group个元素,你如何处理其余的元素,在这种情况下你也可以摆脱循环。

实际上获取字符串的单词是一个有点难的问题。最简单明智的解决方案是拆分非单词字符:

my @words = split /\W+/, $string;