内の単語の連続したペアを取得する方法:私たちは、言葉のすべての可能な連続したペアを取得したいこの文ではPerl
my $sent = "Mapping and quantifying mammalian transcriptomes RNA-Seq";
。
コンパクトな方法はありますか?
内の単語の連続したペアを取得する方法:私たちは、言葉のすべての可能な連続したペアを取得したいこの文ではPerl
my $sent = "Mapping and quantifying mammalian transcriptomes RNA-Seq";
。
コンパクトな方法はありますか?
はい。
my $sent = "Mapping and quantifying mammalian transcriptomes RNA-Seq";
my @pairs = $sent =~ /(?=(\S+\s+\S+))\S+/g;
非常に涼しい、あなたが先読みでキャプチャすることがわかりませんでした。 –
これは動作します。
my @sent = split(/\s+/, $sent);
my @var = map { $sent[$_] . ' ' . $sent[$_ + 1] } 0 .. $#sent - 1;
即ちだけ単語の配列に元の文字列を分割し、その後反復所望のペアを生成するmap
を使用します。
私は1行ではありませんが、次のコードはどこかで起動する必要があります。基本的にはpush
と/g
の正規表現で行います。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Indent = 1;
my $t1 = 'aa bb cc dd ee ff';
my $t2 = 'aa bb cc dd ee';
foreach my $txt ($t1, $t2)
{
my @a;
push(@a, $&) while($txt =~ /\G\S+(\s+\S+|)\s*/g);
print Dumper(\@a);
}
ワンライナーあなたは言葉の奇数、まだエントリーを取得し、最後の言葉を持っている場合
my @a = $txt =~ /\G(\S+(?:\s+\S+|))\s*/g;
@ysthから私の正規表現は、そのわずかに異なる構文のおかげです。
オペレータの評価の順序に依存していますが、派手な正規表現または指標に依存しない(おそらく、愚かに)変化:彼らは言葉の間、元の空白を維持するか、単にスペースを使用するかどうか
my @words = split /\s+/, $sent;
my $last = shift @words;
my @var;
push @var, $last . ' ' . ($last = $_) for @words;
回答が異なります。どちらをお望みでしたか? – ysth