Perl正则表达式不匹配

时间:2014-02-27 17:37:54

标签: regex perl

我在Perl中有以下正则表达式。

if ($line =~ m/DX/o) {
  printf("%s.\n", $line);
}

if ($line =~ m/.*DX\s+.*\s+.*\s+(.*)\sGB/oi) {
                printf("TRUE: %s\n", $1);
                ($dx = $1) =~s/,//g;
}

正在打印

DX 93,132 GB -- 2,145 GB 16840176 16835553.

但是没有进入第二个正则表达式。我检查了正则表达式,看不到任何错误。有人可以建议吗?

感谢。

3 个答案:

答案 0 :(得分:2)

如果所有字段都由多个空格分隔(即所有字段都不能包含一行中的两个或多个空格),我建议使用split而不是正则表达式:

if ($line =~ /^DX/) {
    my @fields = split /\s{2,}/, $line;
    $fields[3] =~ s/,//g; # Strip commas from 4th field
    print $fields[3];
}

__END__
2145 GB

如果您的数据实际上是制表符分隔的,请将split更改为

my @fields = split /\t/, $line;

答案 1 :(得分:0)

关注应该工作:/--\s+(\S+)\s/

答案 2 :(得分:0)

试试这个:

^\s*DX.*?([\d,]+)\sGB(?!.*GB)/oi