Несколько совпадающих выражений с использованием Perl - PullRequest
0 голосов
/ 01 июля 2018

У меня есть входной файл, из которого я хочу извлечь значения. Входной файл имеет такой формат:

 > P-phase pairs total =         5135
 > S-phase pairs total =         4155

Я хочу написать скрипт Perl, который соответствует выражению в этом текстовом файле и выводит значение после знака равенства. Приведенный ниже код может обрабатывать вывод первого значения, но я хочу также вывести и второе значение (4155). Что было бы лучшим способом изменить этот код, чтобы разрешить несколько совпадающих выражений? Спасибо.

#!/usr/bin/perl
use strict;
use warnings;
open (my $file, "<", "input.txt") || die ("cannot open ph2dt file.\n");
open (my $out, ">", "output.txt") || die ("cannot open outfile.\n");

while(my $line =<$file>) {
  chomp $line;
  if ($line =~ / > P-phase pairs total =.*?(\d+)/) {
    print $1;
  }
}

1 Ответ

0 голосов
/ 01 июля 2018

Заменить

if ($line =~ / > P-phase pairs total =.*?(\d+)/) {

с

if ($line =~ / > [PS]-phase pairs total =.*?(\d+)/) {

или

if ($line =~ / > .-phase pairs total =.*?(\d+)/) {

Мы могли бы также закрепить совпадение, чтобы избежать ненужного сопоставления и возврата, и следует избегать .*?, поскольку это может вызвать сильные головные боли. Итак, мы получаем:

if ($line =~ /^ > .-phase pairs total =\s*(\d+)/) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...