2016-10-21 6 views
-1

だから、私は今この問題に取り組んできました。Perl正規表現で文字列を取り込むのに問題がありますか?

は私が持っている百のFASTA配列とファイルは次のように配置された:| 192567 |ギガバイト|

> GI AAA37417.1 |嚢胞性線維症膜貫通コンダクタンス制御因子[ハツカネズミ] MQKSPLEKASFISKLFFSWTTPILRKGYRHHLELSDIYQAPSADSADHLSEKLEREWDREQASKKNPQLIHALRRCFFWRFLFYGILLYLGEVTKAVQPVLLGRIIASYDPENKVERSIAIYLGIGLCLLFIVRTLLLHPAIFGLHRIGMQMRTAMFSLIYKKTLKLSSRVLDKISIGQLVSLLSNNLNKFDEGLALAHFIWIAPLQVTLLMGLLWDLLQFSAFCGLGLLIILVIFQAILGKMMVKYRDQRAAKINERLVITSEIIDNIYSVKAYCWESAMEKMIENLREVELKMTRKAAYMRFFTSSAFFFSGFFVVFLSVLPYTVINGIVLRKIFTTISFCIVLRMSVTRQFPTAVQIWYDSFGMIRKIQDFLQKQEYKVLEYNLMTTGIIMENVTAFWEEGFGELLQKAQQSNGDRKHSSDENNVSFSHLCLVGNPVLKNINLNIEKGEMLAITGSTGLGKTSLLMLILGELEASEGIIKHSGRVSFCSQFSWIMPGTIKENIIFGVSYDEYRYKSVVKACQLQQDITKFAEQDNTVLGEGGVTLSGGQRARISL​​ARAVYKDADLYLLDSPFGYLDVFTEEQVFESCVCKLMANKTRILVTSKMEHLRKADKILILHQGTSYFYGTFSELQSLRPSFSSKLMGYDTFDQFTEERRSSILTETLRRFSVDDSSAPWSKPKQSFRQTGEVGEKRKNSILNSFSSVRKISIVQKTPLCIDGESDDLQEKRLSLVPDSEQGEAALPRSNMIATGPTFPGRRRQSVLDLMTFTPNSGSSNLQRTRTSIRKISLVPQISLNEVDVYSRRLSQDSTLNITEEINEEDLKECFLDDVIKIPPVTTWNTYLRYFTLHKGLLLVLIWCVLVFLVEVAASLFVLWLLKNNPVNSGNNGTKISNSSYVVI ITSTSFYYIFYIYVGVADTLLALSLFRGLPLVHTLITASKILHRKMLHSILHAPMSTISKLKAGGILNRFSKDIAILDDFLPLTIFDFIQLVFIVIGAIIVVSALQPYIFLATVPGLVVFILLRAYFLHTAQQLKQLESEGRSPIFTHLVTSLKGLWTLRAFRRQTYFETLFHKALNLHTANWFMYLATLRWFQMRIDMIFVLFFIVVTFISILTTGEGEGTAGIILTLAMNIMSTLQWAVNSSIDTDSLMRSVSRVFKFIDIQTEESMYTQIIKELPREGSSDVLVIKNEHVKKSDIWPSGGEMVVKDLTVKYMDDGNAVLENISFSISPGQRVGLLGRTGSGKSTLLSAFLRMLNIKGDIEIDGVSWNSVTLQEWRKAFGVITQKVFIFSGTFRQNLDPNGKWKDEEIWKVADEVGLKSVIEQFPGQLNFTLVDGGYVLSHGHKQLMCLARSVLSKAKIILLDEPSAHLDPITYQVIRRVLKQAFAGCTVILCEHRIEAMLDCQRFLVIEESNVWQYDSLQALLSEKSIFQQAISSSEKMRFFQGRHSSKHKPRTQITALKEETEEEVQETRL

私は、ファイルを開くサブルーチンを書いて、一度に各シーケンス1を読みました。各シーケンスに対して、最初にgi番号を、大文字で長いシーケンスを文字列として追加することを考えています。しかし、私はこれらの値を格納する正規表現を書くのに問題があります。これが返す実行しようと、しかし

sub getFASTA { 
    my ($filename) = @_; 
    my @FASTA_arr; 
    $/ = "\n\n"; 
    open (my $fh, '<', $filename) or 
      die ("Could not open file: $filename"); 
    while (<$fh>) { 
      chomp $_; 
      $_ =~ /^>gi|(\d*?)|/s; 
      say "$1"; 
    } 
    close $fh; 
    #say join(" ", @FASTA_arr); 
} 

::これは、各シーケンスのために返され

Use of uninitialized value $1 in string at sequenceAlignment.pl line 30, <$fh> chunk 1. 

ので、ここで私が実際にGI番号を記憶された場合、私は見るために微調整私の現在のサブルーチンは、あります合計で100回。

だから何が間違っているのでしょうか?私は正規表現の問題であることはほとんど確信しています。なぜなら、 "$ _ =〜/(> gi |)/ s;"に変更したので、100 "> gi |印刷する。

+1

正規表現でパイプをエスケープする必要があります: '$ _ =〜/ ^> gi \ |(\ d *?)\ |/s' –

答えて

0

|正規表現でORを意味します。それを脱出する。 (キャプチャグループの最後にあって2番目のオペランドを持っていなかったときに本当に何を意味しているかはperlのように見えます)

+0

ありがとうございました。私は特殊文字を考えていませんでした –

関連する問題