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 *