我在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.
但是没有进入第二个正则表达式。我检查了正则表达式,看不到任何错误。有人可以建议吗?
感谢。
答案 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