regex - Perl 正则表达式跳过每一行

标签 regex perl

我正在尝试从这样的文本文件中提取每一行的第一个完整数字:

8 gcaggcaaactgcgataataaaaggctgtttcaacagcggagtggattgt 1.5307684822361e-176
11 tttacccagtgagtttgaagcaaggatcttttagtttaccgaaaaatgag 3.22210306380202e-293
14 agcaatagcgcgaacagacaacctcatcagtctaccgcgcaccctttccc 1.32107737963584e-52
20 agtgacagggaaaggcgatcgcggctttacgatcagagatcggtgtcggt 0.942504155078175
30 tccggagactttcgattgcatgcaattcaccatcataccctcttgccctc 0
45 actgagcccctgacgctggccagtgtagcgctgtgaagtcccctctcagg 9.49147409471272e-307
53 gaaccgagcgatcgctgctgccattgtctcgccttctgccgaggaatgcc 2.15850303270505e-28

在以下代码中使用正则表达式:

my $id = undef;
while (my $line = <INFILE>){
  chomp $line;
  if ($line =~ /\A([0-9]+)/){
      $id = $1;
  }
print OUTFILE "$id\n";
$line = <INFILE>;
chomp $line;
}

我得到的输出只包括每隔一行:

8
14
30
53

我试过在不进行匹配的情况下打印出每一行,一切都在那里。一旦我添加了正则表达式,它就会跳过每一行。知道为什么要这样做吗?

最佳答案

您正在从 INFILE 句柄中读取两次,一次是在 while 条件下,一次是在循环结束时。

删除,最后阅读:

my $id = undef;
while (my $line = <INFILE>){
  chomp $line;
  if ($line =~ /\A([0-9]+)/){
      $id = $1;
  }
  print OUTFILE "$id\n";
}

关于regex - Perl 正则表达式跳过每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11564726/

相关文章:

使用正则表达式的 Java 数组洞

c# - 我的 C# 正则表达式存在问题,适用于 javascript

Python正则表达式通过带有一个前导空格的特殊字符截断字符串

perl - shell 命令在 perl 脚本中的不同结果

multithreading - Perl中的并发子例程

从 cron.daily 运行时 Perl 找不到模块

python - 处理推文时使用 JSON 或正则表达式

ruby-on-rails - 带有 ruby​​ on rails 形式的正则表达式模式

windows - 如何在 Windows 上捕获 Perl 输出(Strawberry perl)

regex - 在 Perl 中,if (s/^\+//) 是什么意思?