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 文字列内の個々のアイテムを検索します。アイテムは、1 つ以上のACGT塩基のシーケンス、または角括弧内のシーケンスとそれに続く中括弧内の繰り返し回数のペアです。繰り返し回数が 1 回だけになることはないと想定していますが、その可能性がある場合、このコードは簡単に変更できます。

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 に答える