0

我正在尝试通过以下方式音译 DNA 字符串以生成反向补码...然后使用生成的输出作为模式在大 DNA 字符串中查找匹配项

$revcomp = reverse($dna);

$revcomp =~ tr/ACGTacgt[]{}N/TGCAtgca][}{./;

例如:如果这是我的输入字符串,

C[AG]{7,10}[ACGT]{5,8}ATGC

我希望我的输出是

GCAT[ACGT]{5,8}[CT]{7,10}G

但是,我最终得到的是:GCAT{8,5}[ACGT]{01,7}[CT]G

有什么帮助吗??

4

1 回答 1

3

我不知道您使用的 DNA 字符串表示,但此代码适用于您的数据。

它在 DNA 字符串中查找单个项目,其中一个项目可以是一个或多个ACGT碱基的序列,或方括号中的序列,后跟一对大括号中的重复计数。我假设永远不会只有一个重复计数,但是如果可能的话,这段代码很容易修改。

use strict;
use warnings;

my $seq = 'C[AG]{7,10}[ACGT]{5,8}ATGC';
my $rev = '';

while (1) {
  if ($seq =~ /\G([ATGC]+)/igc) {
    (my $new = reverse $1) =~ tr/ACGTacgt/TGCAtgca/;
    $rev = $new.$rev;
  }
  elsif ($seq =~ /\G\[([ATGC]+)\]\{(\d+),(\d+)\}/igc) {
    (my $new = reverse $1) =~ tr/ACGTacgt/TGCAtgca/;
    $rev = "[$new]{$2,$3}".$rev;
  }
  else {
    last;
  }
}

print $rev;

输出

GCAT[ACGT]{5,8}[CT]{7,10}G
于 2012-11-27T19:18:09.917 回答