正则表达式允许文件在每一行中包含十进制数

时间:2013-11-12 08:11:29

标签: python regex perl

我正在尝试使用正则表达式来验证我的文件只能包含十进制数整数空格和新行 对于例如一些允许的值是

File1中

0.10
0.05
0.07
0.03
0.15
0.60
8
10.5

文件2

5 10.4
1.6766 4.2
3.9
9 4
1.67 3

我尝试使用以下正则表达式

/^((\d+\.?\d*\s*)+\n)+/

我缺少什么?

2 个答案:

答案 0 :(得分:2)

也许你应该逐行解析你的文件而忘记多行的事情。 您可能想尝试以下Perl代码。打印出与正则表达式不匹配的行号。

my $num = qr/\d+(?:\.\d+)?/;

while( <> ){
    chomp;
    die "Error line $." unless m/^(?: $num (?:\s+ $num)* | \s* )$/x;
}

答案 1 :(得分:0)

考虑到你的评论,这是另一个主张。 我检查了我的正则表达式对你的数据,它的工作原理。

$/ = undef; # slurp mode

my $num = qr/\d+(?:\.\d+)?/;
my $data = <>;

die "Error" unless $data =~ m/\A(?: ^(?: $num (?:\s+ $num)* | \s* )$)*\Z/xms;