在perl中重新构造字符串查询

时间:2010-12-06 01:24:15

标签: perl

如何在perl中重新构造字符串?

例如,考虑字符串“卢浮宫在哪里?”

如何生成如下字符串:

“这是卢浮宫的位置”
“卢浮宫位于” “卢浮宫位于”

这些被用作进行网络搜索的查询。

我试图做这样的事情:

摆脱标点符号并将句子分成单词 我的@words = split / /,$ _ [0];

我不需要字符串中的第一个单词,所以摆脱它。
移(@words);

然后我需要移动数组中的下一个字 - 不知道该怎么做!!

最后将单词数组转换回字符串。

3 个答案:

答案 0 :(得分:1)

  1. How can I generate all permutations of an array in Perl?
  2. 然后使用join将每个排列数组合在一起形成一个字符串。

答案 1 :(得分:1)

更冗长的例子:

use strict;
use warnings;

use Data::Dumper;


my $str = "Where is the Louvre located?";

# split into words and remove the punctuation
my @words = map {s/\W+//; $_} split / /, $str;

# remove the first two words while storing the second
my $moving = splice @words, 0 ,2;


# generate the variations
my @variants;
foreach my $position (0 .. $#words) {

    my @temp = @words;
    splice @temp, $position, 0, $moving;
    push @variants, \@temp;

}

print Dumper(\@variants);

答案 2 :(得分:0)

my @head;
my ($x, @tail) = @words;
while (@tail) {
    push @head, shift @tail;
    print join " ", @head, $x, @tail;
};

或者你可以通过数组“冒泡”$ x:$ words [$ n-1]和words [$ n]

foreach $n (1..@words-1) { 
    ($words[$n-1, $words[$n]) = ($words[$n], $words[$n-1]);
    print join " ", @words, "\n";
};