连接两个字符串,以便合并它们的公共后缀和前缀

时间:2012-03-21 16:01:45

标签: regex string perl concatenation

我有两个字:

AGCGCGATAGC
       ^^^^
TAGCTATATATA
^^^^

第二个单词TAGC与第一个单词相同。所以我希望得到结果:

AGCGCGATAGCTATATATA
       ^^^^

是否有任何结合这些词的Perl功能?使用连接可能会导致重复:

AGCGCGATAGCTAGCTATATATA
       ^^^^^^^^

2 个答案:

答案 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";