2

長い DNA 配列の部分文字列を取得したい

たとえば、次のようになります。

1/ATXGAAATTXXGGAAGGGGTGG
2/AATXGAAGGAAGGAAGGGGATATTX
3/AAAAAATTXXGGAAGGGGXTTTA
4/AAAATTXXATAXXGGAAGGGGXTXG
5/ATTATTGTTXAXTATTT

出力は次のようになります。

1/TXG    -  TTXX
2/TXG     -
3/       -  TTXX
4/TTXX  -   TXG
5/             -    

次の正規表現パターンを試しました:

(TXG|TTXX) 

それは機能し、結果はリストに入れられますが、元のシーケンスに表示された各結果の順序を取得する方法がわかりません。つまり、とがそれぞれシーケンス 4 のように最初と 2 番目TTXXに表示されるかどうか、シーケンス 1 のように 2 番目と最初に表示されるかどうか。TXG2 番目と 3 番目の結果では、match-xx 関数呼び出しは、問題のシーケンスから取得した部分文字列のインデックスを提供しないため、より困難です。あなたの洞察に感謝します。

4

3 に答える 3

3

どうですか:

#!/usr/bin/perl 
use strict;
use warnings;
use Data::Dump qw(dump);

my %res;
while(my $line = <DATA>) {
    chomp$line;
    while($line =~ /TXG|TTXX/g) {
        push @{$res{$line}}, "found $& at pos:".(pos($line)-length($&));
    }
}
dump%res;

__DATA__
ATXGAAATTXXGGAAGGGGTGG
AATXGAAGGAAGGAAGGGGATATTX
AAAAAATTXXGGAAGGGGXTTTA
AAAATTXXATAXXGGAAGGGGXTXG
ATTATTGTTXXXTATTT

出力:

(
  "ATTATTGTTXXXTATTT",
  ["found TTXX at pos:7"],
  "AATXGAAGGAAGGAAGGGGATATTX",
  ["found TXG at pos:2"],
  "AAAAAATTXXGGAAGGGGXTTTA",
  ["found TTXX at pos:6"],
  "AAAATTXXATAXXGGAAGGGGXTXG",
  ["found TTXX at pos:4", "found TXG at pos:22"],
  "ATXGAAATTXXGGAAGGGGTGG",
  ["found TXG at pos:1", "found TTXX at pos:7"],
)
于 2011-11-29T12:43:27.463 に答える
0

2 つのマッチング関数を配置するとどうなりますか?

my $result="";

$result.="TXG" if(/TXG/);
$result.="TTXX" if (/TTXX/);

print $result;
于 2011-11-29T12:37:50.340 に答える