2012-03-21 88 views
2

我有两句话:连接两个字符串,以便他们共同的后缀,前缀合并

AGCGCGATAGC 
     ^^^^ 
TAGCTATATATA 
^^^^ 

第二个字TAGC是第一个字常见。所以我想要的结果是:

AGCGCGATAGCTATATATA 
     ^^^^ 

是否有Perl函数结合这些词?使用级联可能导致重复:

AGCGCGATAGCTAGCTATATATA 
     ^^^^^^^^ 
+1

没有内置函数来做到这一点。你必须自己写。 – jasonlfunk 2012-03-21 16:04:13

+0

这有帮助吗? http://www.perlmonks.org/?node_id=484593 – Daenyth 2012-03-21 16:47:18

回答

5

一个简单的方法做,这是一个字符加入串在一起,不是在你的拼音:

my $s1 = 'AGCGCGATAGC'; 
my $s2 = 'TAGCTATATATA'; 
$_ = "${s1}_$s2" 

然后匹配并更换最长的常见字符串在隔板的每一侧:

s/([ACGT]*)_\1/$1/ 
+1

$ _ =“$ s1_ $ s2”应该是$ _ =“$ {s1} _ $ s2”(以避免错误)并且[ACGT] +应该是[ACGT] *(处理没有共同子字符串的输入)。 – 2012-03-21 22:57:08

+0

@ Ekkehard.Horner:谢谢。这就是我没有测试的结果! – 2012-03-21 23:49:00

2

您可以使用构造是这样的:

my $txt = 'AGCGCGATAGCD'; 
my $txt2 = 'TAGCTATATATA'; 
print "$txt\0$txt2" =~ /(.*)(.+)\x{0}\2(.+)/ ? "$1$2$3" : "$txt$txt2";