Regex Perl正则表达式不匹配
我有以下Perl正则表达式Regex Perl正则表达式不匹配,regex,perl,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; } 它正在印刷 DX93132 GB--2145 GB 16840176 16835553. 但是没有进入第二个正
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;
}
它正在印刷
DX93132 GB--2145 GB 16840176 16835553.
但是没有进入第二个正则表达式。我已经检查了正则表达式,没有看到任何错误。有人能给我建议吗
谢谢。以下方法应该有效:
/-\s+(\s+)\s/
试试这个:
^\s*DX.*?([\d,]+)\sGB(?!.*GB)/oi
如果所有字段都由多个空格分隔(即,任何字段都不能在一行中包含两个或多个空格),我建议使用
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;
如果您的字段都由多个空格分隔,则可以考虑使用<代码>拆分< /代码>而不是正则表达式。无论如何,您的正则表达式被破坏:因为<代码> ./COD>匹配任何字符,<代码> */COD>贪婪,它将尽可能多地吞并,包括空白分隔符。但是,这并不妨碍匹配,它只会影响捕获的内容
$1
。当我在你的字符串上测试正则表达式时,它实际上与我匹配。我假设这是多个空间(例如,DX
和93132之间有19个空格…
?我仍然需要使用正则表达式来检查行是否以DX开头。我们无法复制此问题。向我们显示use Data::Dumper;$Data::Dumper::Useqq=1;print Dumper$line;
的输出,以便我们确切地知道其中的内容$line@AkshaiShah您没有检查此代码中的行以DX开头。这样的检查将包括行定位的^
开头:/^DX/
。它不会检查行是否以DX开头/DX[^-]+-\s+(\s)\s/
,但仍然不会检查行是否以DX开头。