2016-12-29 38 views
1

我试图找出使用正则表达式在一定的范围从文本中的数字(浮动),文本格式是: 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列我变得真实

+0

使坏'M9 [3-9] ..........' – bansi

+0

您可能需要匹配整条生产线 – Fallenhero

+1

你为什么不匹配像' ^(\ S +)\ s +(\ S +)\ s +(\ w +)\ s +(\ S +)\ s +(\^\ [\ [\ d +。)?9 [3-9]''以确定您正在使用哪一列,如果您可以轻松使用空格分隔符。 – Ultimater

回答

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