多个不匹配的情况下的语法是什么?点运算符(.)在Perl中?我需要将DNA序列与允许3个不匹配的目标序列进行匹配。它的语法是什么?
例如,设DNA序列为ATGC,目标序列为ATGAGCA。匹配完成后,我的结果应该如下:
position no : pattern
1 A...
1 .T..
1 ..G.
3 ..G.
3 ...C
4 A...
发布于 2011-11-17 13:14:36
对于您在模式中显示的内容,您需要为“最多3个”匹配项指定数量,而{
n,
m}
是一个“量词”,指定至少n个匹配项,但不超过m。如果您省略了一个数字,它将默认为0或.{3}
.{,3}
。
为了将ATGC
匹配到ATGAGCA
,我认为你可能需要/(?:A[^T]{,3}T[^G]{,3}G[^C]{,3}C)+/
,因为这是如此规则,你可以这样表达:
sub make_match_regex {
my ( $fc, @ch ) = split //, shift;
my $cat = join( '', $fc, map { "[^$_]{,3}$_" } @chars );
return qr/(?:$cat)+/;
}
发布于 2011-11-17 19:43:48
检查此代码
use warnings;
use strict;
my $DNA_seq = "ATGC";
my $target_sequence = "ATGAGCA";
my @tseq = split(//,$target_sequence);
print "position pattern\n";
#4 is the length of the DNA sequence
for(my $i=0; $i<=@tseq-4;$i++) {
my $str = join('',@tseq[$i..$i+3]);
foreach my $pattern qw(A... .T.. ..G. ...C) {
if($str =~ /$pattern/) {
my $position = $i+1;
print "$position $pattern\n";
}
}
}
输出为
position pattern
1 A...
1 .T..
1 ..G.
3 ..G.
3 ...C
4 A...
https://stackoverflow.com/questions/8167595
复制