2

PerlでDNA文字列の逆補完が必要です。これは非常に単純で、次の式があります。

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

文字列を逆にします。[]あいまいな文字に注意してください。ただし、これを拡張してより複雑な式を許可したい場合、この単純なスキームは失敗します。たとえば、(中括弧も考慮された後)私たちが望むものではないC[AG]{7,10}[ACGT]{5,8}ATGC正規表現になります。GCAT{8,5}[ACGT]{01,7}[CT]Gこれに対して予想される逆補数はですGCAT[ACGT]{5,8}[CT]{7,10}G。どうすればこれに取り組むことができますか?

4

1 に答える 1

2

数量詞を含む正規表現を正しく機能させるには、文字単位ではなく要素単位で式を逆にする必要があります。「要素ごと」とは、単一の文字または文字クラスと、次の数量詞(存在する場合)を1つの単位として処理する必要があることを意味します。たとえば、の例ではC[AG]{7,10}[ACGT]{5,8}ATGC、C- [AG] {7,10}-[ACGT]{5,8}-ATGCの7つの要素があります。それを要素のリストに分解し、単一の文字列として逆にするのではなく、リストの順序を逆にする必要があります。

ETA:コード

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

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

$re =~ tr/ACGTacgt/TGCAtgca/;

my @elem = $re =~ /((?:\[.*?\]|.)(?:\{.*?})?)/g;

my $rev = join '', reverse @elem;

say $rev;

出力:

GCAT[TGCA]{5,8}[TC]{7,10}G

于 2012-11-29T10:52:47.397 に答える