我是Perl的新手,我正在比较包含DNA核苷酸的2个不同大小的字符串。我希望脚本采用较小的字符串并将其放在更大的字符串中,以容错,并为我提供它在较大的字符串中找到的序列以及两边相邻的5个核苷酸。
例如,如果我有2个字符串:
#1 ATGATCCTG
#2 TCGAGTGGCCATGAACGTGCCAATTG
我希望脚本采用#1并在#2中找到相同的序列但存在2个不匹配,并且两侧都有5个核苷酸。
答案 0 :(得分:1)
我认为使用已经存在的模块并经过充分测试是获得此类任务的方法,已知perl有很多生物模块和用法,因此在cpan中快速搜索我可以找到Bio::Grep它可能是一个很好的帮助
修改强>
有可能吗?是的,之前有人做过,所以这是可能的,但我不认为这是一个简单的正则表达式的简单任务
由于我不是生物专家,我试图做出一个我能理解的简单例子
use strict;
use warnings;
use Data::Dumper;
my $str1 = 'ATGATCCTG';
my $str2 = 'TCGAGTGGCCATGAACGTGCCAATTG';
my @s1 = split '', $str1;
my $miss = 0;
my $pattern = '';
for (@s1){
my $r = $_;
if ($str2 =~ /$pattern$r/){
$pattern .= $r;
} else {
$miss++;
$pattern .= '[ATCG]'
}
}
##this is the pattern we used
print Dumper $pattern;
##withoud 5 nucleotides on both sides
#$str2 =~ m/($pattern)/g;
#5 nucleotides on both sides match pattern
$str2 =~ m/(\w{0,5}$pattern\w{0,5})/g;
##this is the match
print Dumper $1;
##number of missmatches
print Dumper $miss;
再次,我不确定这是完全做到这一点的方法,绝对不是特别是大DNA序列的方法,但对于你上面的任务,我认为它还可以。