Perl跳过没有任何字母数字字符的行

时间:2014-07-29 19:44:02

标签: regex perl

我需要解析一个制表符分隔文件,我想跳过不包含任何字母数字字符的行。

文件中的每一行都包含不包含任何数据的制表符分隔字段。因此,如果不是行中的选项卡,它似乎是一个空行。

我尝试过使用next,除非line有一个字母数字字符但是没有用 有什么想法吗?感谢

while (defined($line = <IN>)){                  
  chomp($line);
  next unless $line =~ /\w/;
  print OUT "$fields[3]\t$fields[4]\t$fields[5]\t$fields[6]\t$fields[13]\t$fields[15]\t$fields[10]\n";
}

4 个答案:

答案 0 :(得分:0)

几行输入可能有助于输入几行。你是在重新声明块中的@field数组还是一遍又一遍地打印同一组值? e.g。

while (<$fh>) {                  
  chomp;
  my @fields = split(/\t/, $_, -1);
  print OUT join("\t", map { $fields[$_] } (3,4,5,6,13,15,10)), "\n" if $_ =~ m/\w+/;
}

答案 1 :(得分:0)

要匹配包含字母数字字符的行,请使用:

.*?[\p{L}\p{Nd}]+.*

答案 2 :(得分:-1)

我认为您需要在\ w中添加一些数量。请尝试\ w +。

答案 3 :(得分:-1)

试试这个:

while (defined($line = <IN>)){                  
  chomp($line);
  next if $line =~ /^\s*$/;
  print OUT "$fields[3]\t$fields[4]\t$fields[5]\t$fields[6]\t$fields[13]\t$fields[15]\t$fields[10]\n";
}