Regex 如何从字符串数组中查找模式

Regex 如何从字符串数组中查找模式,regex,perl,Regex,Perl,如何找到可以定义一组字符串的模式? 例如,如果我有这些字符串 my @single = ( "Hello World my name is Alice", "Hello World my name is Bob", "Hello World my name is Charlie" ); my @multi = ( "That Building is very small", "That Ladder is very tall" ); 我现在尝试的是用确切的词数把句子分成几

如何找到可以定义一组字符串的模式? 例如,如果我有这些字符串

my @single = (
  "Hello World my name is Alice",
  "Hello World my name is Bob",
  "Hello World my name is Charlie"
);

my @multi = (
  "That Building is very small",
  "That Ladder is very tall"
);
我现在尝试的是用确切的词数把句子分成几组。然后构建一棵树,其中节点是单词,如果一个节点有许多分支,它们将被替换为*。但这仅在*在末尾(@single)时有效,但在*不在末尾(@multi)时无效

基本上,我想要的是输出一个模式,其中输入是一个字符串数组。给定上面的字符串,如何生成下面的这些模式

my $single_pattern = "Hello World my name is *"
my $multi_pattern = "That * is very *"

我不清楚你所说的“定义一组字符串”是什么意思。您的意思是查找
“is”
旁边的大写单词吗?你的意思是找到句子的主语吗?你的意思是找到句子中的最后一个名词吗?你的意思是找到句子中第一个与其他单词不同的单词吗?无论如何,这听起来像是一项自然语言处理任务。请明确说明你想要完成什么。谢谢
use 5.010;
use Perl6::Junction qw(all);

sub pattern_from_wordset {
    my (@wordset) = @_;
    my @transposed;
    for my $string (@wordset) {
        my @parts = split / /, $string;
        while (my ($index, $part) = each @parts) {
            push $transposed[$index]->@*, $part;
        }
    }
    my @pattern;
    for my $words (@transposed) {
        push @pattern, (all($words->@*) eq $words->[0])
            ? $words->[0]
            : '*';
    }
    return @pattern;
}

my @single = …
my @multi = …

say join ' ', pattern_from_wordset @single;
say join ' ', pattern_from_wordset @multi;
__END__
Hello World my name is *
That * is very *