我有一些基因序列(见下文),我想找到所有开放阅读框(从ATG开始并停止TAG)。
我试过这个:
my $file = ('ACCCTGCCCAAAATCCCCCCGATCGATAGAGCTAAATGGCCCATGATGCATCGACTAGCTAGCTAAAATGTCGATCGATACAGCTAATAG');
while($file =~ /(ATG\w+?TAG)/g){
print $1;
}
但它只给出了
ATGGCCCATGATGCATCGACTAGATGTCGATCGATACAGCTAATAG
我怎样才能得到每一个人?
答案 0 :(得分:2)
结果没问题,只需将它们分开输出:
print "$1\n";
答案 1 :(得分:2)
你得到两场比赛。为了看到它们,我建议你在它们之间打印一些分隔符:
print "$1\n";
然后我们得到输出:
ATGGCCCATGATGCATCGACTAG
ATGTCGATCGATACAGCTAATAG
如果要查找也出现在另一个内部的帧,则必须确保不要消耗太多字符。通过looahead解决这个问题:
/ATG(?=([ACTG]*+TAG))/g;
然后print "ATG$1\n"
,输出:
ATGGCCCATGATGCATCGACTAG
ATGATGCATCGACTAG
ATGCATCGACTAG
ATGTCGATCGATACAGCTAATAG
答案 2 :(得分:2)
找到所有出现的诀窍是使用零宽度断言,这将阻止我们的字符“吃掉”:(?=ATG\w+?TAG)
。
这个问题是我们会得到空匹配,所以解决方案就是使用一个组:
(?=(ATG\w+?TAG))
。您将在第1组中找到所有出现的情况。
第1组输出:
ATGGCCCATGATGCATCGACTAG
ATGATGCATCGACTAG
ATGCATCGACTAG
ATGTCGATCGATACAGCTAATAG
答案 3 :(得分:0)
如果你想在同一帧中设置起始和终止密码子,不要忘记将结果过滤到长度倍数为3的唯一密码:
print "ATG$1\n" if (length($1)%3) == 0 ;
如果您想检查一个序列中的六个帧,请不要忘记检查互补链:
$comp_chain = reverse($chain) ;
$comp_chain =~ tr/ATCG/TAGC/ ;
然后,您将从单个序列中的六个阅读框中获得开放阅读框。