从行中提取特定列并与给定范围匹配

时间:2016-12-29 06:43:06

标签: regex perl

我试图使用正则表达式识别文本中某个范围内的数字(浮点数),文本格式为: 3 1 EDR 918771665157 ^[[32m97.01424 ^[[0m918489349209 ^[[32m97.01408 ^[[0m 3 2 EDR 918493379596 ^[[32m87.01418 ^[[0m918775654999 ^[[32m87.01434 ^[[0m

^[[32m^[[0m字符串是由于颜色。 我试图检查第5列和第7列是否介于93.00000和99.99999之间, 但是如果值为93.00000,则可能显示为93。 我尝试了以下内容:9[3-9](\.\d{1,5})?\s+\S+\s+.*9[3-9](\.\d{1,5})?但是我有一个问题,因为在第二行这里第5和第7列不在范围内但由于第4和第6列我得到了真实

1 个答案:

答案 0 :(得分:3)

我建议您拆分该行,以便您可以获得确切的列,然后对这些列进行所需的处理。请参阅以下方法:

#!/usr/bin/env perl
use strict;
use warnings;

while(<DATA>){
    chomp;
    my @columns = split/\s+/, $_;
    my $fifth_column = $columns[4];
    my $seventh_column = $columns[6];

    #Remove ^[[32m and ^[[0m
    $fifth_column =~ s/\^\[\[32m|\^\[\[0m//g;
    $seventh_column =~ s/\^\[\[32m|\^\[\[0m//g;

    #Verify that above are between 93.00000 and 99.99999
}

__DATA__
3  1  EDR  918771665157  ^[[32m97.01424  ^[[0m918489349209  ^[[32m97.01408   ^[[0m
3  2  EDR  918493379596  ^[[32m87.01418  ^[[0m918775654999  ^[[32m87.01434   ^[[0m