2美元不在Perl搜索中工作,并替换为不那么特殊的情况

0 regex perl curl replace tsv

亲爱的stackoverflow社区,

我试图使用基于网页的卷曲查找添加条目到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";
} 
Run Code Online (Sandbox Code Playgroud)

输入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标记的网页的页面源中唯一一行就像

<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案件会有所不同?对于trn和非trn情况,网页源代码行的格式似乎相同,我无法理解为什么我的正则表达式会因此情况而失败.

此外,我是Perl的新手,所以欢迎任何关于组织或保持代码清洁和简洁的建议:).

非常感谢,

迈克尔

ike*_*ami 5

$name =~ /^(\w+)(\s+)(([A-Za-z0-9\-]+\s*)+)/;不匹配,因此不会改变$1,$2等等.