比较2个不同大小的字符串

时间:2013-08-08 15:25:55

标签: perl bioperl

我是Perl的新手,我正在比较包含DNA核苷酸的2个不同大小的字符串。我希望脚本采用较小的字符串并将其放在更大的字符串中,以容错,并为我提供它在较大的字符串中找到的序列以及两边相邻的5个核苷酸。

例如,如果我有2个字符串:

#1  ATGATCCTG
#2  TCGAGTGGCCATGAACGTGCCAATTG

我希望脚本采用#1并在#2中找到相同的序列但存在2个不匹配,并且两侧都有5个核苷酸。

1 个答案:

答案 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序列的方法,但对于你上面的任务,我认为它还可以。