我有一个文件,其中包含很多浮点数:
4.5268e-06 4.5268e-08 4.5678e-01 4.5689e-04 ...
我需要检查是否存在至少一个带有expoenent -1的数字。所以,我用正则表达式编写了这个简短的片段。正则表达式有效,因为我检查过它。但是我在输出中得到的只是1。我知道我遗漏了一些非常基本的东西。请帮忙。
#!usr/local/bin/perl
use strict;
use warnings;
my $i;
my @values;
open(WPR,"test.txt")||die "couldnt open $!";
while(<WPR>)
{
chomp();
push @values,(/\d\.\d\d\d\de+[+-][0][1]/);
}
foreach $i (@values){
print "$i\n";}
close(WPR);
答案 0 :(得分:4)
正则表达式match operator m
(您已省略)如果匹配则返回 true 。 Perl中的 True 通常以1
的形式返回。 (请注意,大多数东西都是 true )。
如果您想坚持使用短语法,请执行以下操作:
push @values, $1 if /(\d\.\d\d\d\de+[+-][0][1])/;
答案 1 :(得分:1)
你可以试试这个:
/\d+\.\d+e-01/
答案 2 :(得分:1)
如果我移动括号,它可以正常工作:
push @values,/(\d\.\d\d\d\de+[+-][0][1])/;
如果该线路上有多个匹配项,我最后会添加g
。
如果您有捕获组和列表上下文,则匹配将返回捕获结果列表。
如果你想把它带到疯狂的结论那么:
my @values = map { /(\d\.\d\d\d\de+[+-][0][1])/g } <WPR> ;
是的,您也可以在列表上下文中使用<WPR>
。
e+
匹配一个或多个e
。更简单的可能是:
/\d\.\d{4}e[+-]01/ ;
还有其他问题,例如匹配x.xxxxe+01
。