0

親愛なるスタックオーバーフロー コミュニティへ

次のように、Webページベースのcurlルックアップを使用して、tsvファイルにエントリを追加しようとしています:

#!/usr/bin/env perl

my $file = "TfbG_peaks2.tsv";
open(INFO, $file) or die("Could not open file.");
#my $VNG = "VNG1649G";
my $query = "(\<title\>)([A-Za-z0-9\- ]*)";
foreach $line (<INFO>) {
        $line =~ /(^VNG\w*)/;
        $VNG = $1;
        my $url = "http://www.ncbi.nlm.nih.gov/gene/?term=$VNG";
        my $page = `curl $url`;
        if ($page =~ /(\<title\>)(VNG)/) {
                $name = "hypothetical protein";
                $abbrev = " ";
                $longname = $name;
        }
        elsif ($page =~ /$query/) {
                $name = $2;
                $name =~ /^(\w+)(\s+)(([A-Za-z0-9\-]+\s*)+)/;
                $abbrev = $1;
                $longname = $3;
        }
        my @values = split('\t', $line);
        splice @values, 1, 0, $abbrev;
        splice @values, 2, 0, $longname;
        print join "\t", @values;
        print "\n";
} 

入力 tsv データ ファイルには、次のような行があります。

VNG1374G Chromosome 1022977 1023252 4.184852806 2.877295983 3.362660404 3.961922335 3.932399564

また

VNGt26 Chromosome 1153828 1154334 4.879550683 3.730707809 5.515198268 5.30410069 5.328461226

<title> HTMLタグを含む、私が探しているWebページのページソースの唯一の行は次のようなものです

<title>trn26 [Halobacterium sp. NRC-1] - Gene - NCBI</title>

trn 名などのエントリの場合

<title>gspE1 type II secretion system protein [Halobacterium sp. NRC-1] - Gene - NCBI</title>

または好き

<title>VNG1872C hypothetical protein [Halobacterium sp. NRC-1] - Gene - NCBI</title>

trn 以外の名前のエントリの場合。

コードは非trn名に対して機能します。つまり、次のようなものを出力します

VNG0218G gspE1 type II secretion system protein Chromosome 186556 186979 4.072750978 2.233376793 2.684902216 3.714576271 3.52083442

または何かのような

VNG2556H hypothetical protein Chromosome 1917796 1918082 3.778968581 2.582944032 2.981130347 3.940093432 4.286983604

ただし、trn エントリの場合は印刷されます

VNGt26 <title> Chromosome 1153828 1154334 4.879550683 3.730707809 5.515198268 5.30410069 5.328461226

予想の代わりに

VNGt26 trn26 Chromosome 1153828 1154334 4.879550683 3.730707809 5.515198268 5.30410069 5.328461226

trn のケースが異なるのはなぜですか? Web ページのソース行は、trn の場合とそうでない場合で同じようにフォーマットされているように見えますが、この場合に正規表現が失敗する理由がわかりません。

また、私は Perl を初めて使用するので、編成やコードをクリーンで簡潔に保つための提案は大歓迎です :)。

どうもありがとう、

マイケル

4

1 に答える 1

5

$name =~ /^(\w+)(\s+)(([A-Za-z0-9\-]+\s*)+)/;一致しないため$1$2、 などは変化しません。

于 2013-06-01T18:24:30.103 に答える