我有一个数组和一个可能会改变的组值:
@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 [在我的头上])。
对建筑物的任何建议表示赞赏!
答案 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;