Невозможно сопоставить строку между |в Perl - PullRequest
0 голосов
/ 26 октября 2018

У меня есть текст, прочитанный из файла fasta, и я пытаюсь прочитать номер доступа в Perl.Но я не получаю вывод.Вот код:

use strict;
use warnings;

sub main {

    my $file = "PXXXXX.fasta";

    if(!open(FASTA, $file)) {
        die "Could not find $file\n";
    }
    my $myLine = <FASTA>;
    my $pat = "|";
    my @Num = $myLine =~ /$pat(.*?)$pat/;
    print($Num[0]);
    close(FASTA);

}

main();

Содержимое файлового дескриптора FASTA:

sp | P27455 | MOMP_CHLPN Основная порина наружной мембраны OS = Chlamydia pneumoniae OX = 83558 GN = ompA PE= 2 SV = 1 MKKLLKSALLSAAFAGSVGSLQALPVGNPSDPSLLIDGTIWEGAAGDPCDPCATWCDAIS LRAGFYGDYVFDRILKVDAPKTFSMGAKPTGSAAANYTTAVDRPNPAYNKHLHDAEWFTN AGFIALNIWDRFDVFCTLGASNGYIRGNSTAFNLVGLFGVKGTTVNANELPNVSLSNGVV ELYTDTSFSWSVGARGALWECGCATLGAEFQYAQSKPKVEELNVICNVSQFSVNKPKGYK GVAFPLPTDAGVATATGTKSATINYHEWQVGASLSYRLNSLVPYIGVQWSRATFDADNIR IAQPKLPTAVLNLTAWNPSLLGNATALSTTDSFSDFMQIVSCQINKFKSRKACGVTVGAT LVDADKWSLTAEARLINERAAHVSGQFRF

Любой ключ, как исправить код для возврата: P27455 1012 *

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Похоже, вы пытаетесь разбить строку на символе |, поэтому используйте функцию разделения.

my @Num = split /\|/, $myLine;

Это разбивает $ myLine на |.Обратите внимание, что вам, возможно, придется изменить индекс на @Num, чтобы получить из него правильный элемент.

0 голосов
/ 26 октября 2018

Трубка | имеет особое значение в регулярных выражениях. Вам нужно избежать этого. Самый простой способ сделать это - использовать \Q и \E.

$myLine =~ /\Q$pat\E(.*?)\Q$pat\E/;

Или вы можете использовать quotemeta встроенный .

my $pat = quotemeta "|";
my @Num = $myLine =~ /$pat(.*?)$pat/; # or use [^$pat]+ 

Вы также можете просто не использовать поиск по регулярному выражению и просто split строку. Если вы всегда хотите второй столбец, это будет так же хорошо.

my (undef, $num) = split /\|/, $line;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...