我有一个要从中提取值的输入文件。输入文件具有以下格式:
> 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;
}
}
答案 0 :(得分:1)
替换
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+)/) {