以下脚本用于在蛋白质序列中找到一个基序。
use strict;
use warnings;
my @file_data=();
my $protein_seq='';
my $h= '[VLIM]';
my $s= '[AG]';
my $x= '[ARNDCEQGHILKMFPSTWYV]';
my $regexp = "($h){4}D($x){4}D"; #motif to be searched is hhhhDxxxxD
my @locations=();
@file_data= get_file_data("seq.txt");
$protein_seq= extract_sequence(@file_data);
#searching for a motif hhhhDxxxxD in each protein sequence in the give file
foreach my $line(@file_data){
if ($motif=~ /$regexp/){
print "found motif \n\n";
} else {
print "not found \n\n";
}
}
#recording the location/position of motif to be outputed
@locations= match_position($regexp,$seq);
if (@locations){
print "Searching for motifs $regexp \n";
print "Catalytic site is at location:\n";
} else {
print "motif not found \n\n";
}
exit;
sub get_file_data{
my ($filename)=@_;
use strict;
use warnings;
my $sequence='';
foreach my $line(@fasta_file_data){
if ($line=~ /^\s*(#.*)?|^>/{
next;
}
else {
$sequence.=$line;
}
}
$sequence=~ s/\s//g;
return $sequence;
}
sub(match_positions) {
my ($regexp, $sequence)=@_;
use strict;
my @position=();
while ($sequence=~ /$regexp/ig){
push (@position, $-[0]);
}
return @position;
}
我不知道如何在含有蛋白质序列的给定文件中找到多个基序(固定顺序,即motif1,motif2,motif3)。
答案 0 :(得分:2)
您可以简单地使用序列的替换(由|
分隔)。这样,正则表达式引擎的每个序列都可以匹配它。
/($h{4}D$x{4}D|$x{1,4}A{1,2}$s{2})/
然后,您可以通过查看$1
来测试此匹配。
答案 1 :(得分:0)
如果你想按特定的顺序找到这些图案,但也许有点分开,你可以使用类似的东西:
/$h{4}D$x{4}D .* $s{4}D$q{4}/x
(/ x允许正则表达式中的空格,。*匹配零个或多个字符)
答案 2 :(得分:0)
另外,如果您正在处理大型输入文件,您可能会考虑预先编译正则表达式以获得更好的速度提升,