我有两个字:
AGCGCGATAGC
^^^^
TAGCTATATATA
^^^^
第二个单词TAGC
与第一个单词相同。所以我希望得到结果:
AGCGCGATAGCTATATATA
^^^^
是否有任何结合这些词的Perl功能?使用连接可能会导致重复:
AGCGCGATAGCTAGCTATATATA
^^^^^^^^
答案 0 :(得分:5)
一种简单的方法是将字符串与不在字母表中的字符连接在一起:
my $s1 = 'AGCGCGATAGC';
my $s2 = 'TAGCTATATATA';
$_ = "${s1}_$s2"
然后在分隔符的每一侧匹配并替换最长的公共字符串:
s/([ACGT]*)_\1/$1/
答案 1 :(得分:2)
你可以使用这样的构造:
my $txt = 'AGCGCGATAGCD';
my $txt2 = 'TAGCTATATATA';
print "$txt\0$txt2" =~ /(.*)(.+)\x{0}\2(.+)/ ? "$1$2$3" : "$txt$txt2";