首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >多个不匹配[点(.)]搜索模式

多个不匹配[点(.)]搜索模式
EN

Stack Overflow用户
提问于 2011-11-17 21:08:12
回答 2查看 337关注 0票数 0

多个不匹配的情况下的语法是什么?点运算符(.)在Perl中?我需要将DNA序列与允许3个不匹配的目标序列进行匹配。它的语法是什么?

例如,设DNA序列为ATGC,目标序列为ATGAGCA。匹配完成后,我的结果应该如下:

代码语言:javascript
代码运行次数:0
运行
复制
position no :          pattern
  1                    A...
  1                    .T..
  1                    ..G.
  3                    ..G.
  3                    ...C
  4                    A...
EN

回答 2

Stack Overflow用户

发布于 2011-11-17 21:14:36

对于您在模式中显示的内容,您需要为“最多3个”匹配项指定数量,而{n,m}是一个“量词”,指定至少n个匹配项,但不超过m。如果您省略了一个数字,它将默认为0或.{3} .{,3}

为了将ATGC匹配到ATGAGCA,我认为你可能需要/(?:A[^T]{,3}T[^G]{,3}G[^C]{,3}C)+/,因为这是如此规则,你可以这样表达:

代码语言:javascript
代码运行次数:0
运行
复制
sub make_match_regex { 
    my ( $fc, @ch ) = split //, shift;
    my $cat = join( '', $fc, map { "[^$_]{,3}$_" } @chars );
    return qr/(?:$cat)+/;
}
票数 0
EN

Stack Overflow用户

发布于 2011-11-18 03:43:48

检查此代码

代码语言:javascript
代码运行次数:0
运行
复制
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";
    }
  }
}

输出为

代码语言:javascript
代码运行次数:0
运行
复制
position pattern
1 A...
1 .T..
1 ..G.
3 ..G.
3 ...C
4 A...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8167595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档