使用Python正则表达式分隔整数,浮点数和科学数字以及名称

时间:2017-01-09 10:14:24

标签: python regex text findall

我有一个包含气象数据的文本文件,其中包括电台名称,纬度,温度,压力等字段。 所有电台的数据都在一行中如下

met = 'KIRKENES (CIV/MIL)              -8.666667       5.350000       5.866667      HORNSUND RIVER     ENAN      7.9999998E-02  93  85  2.0000000E-02  0.1600000      4.9999997E-02      -999.9000      -999.9000      8  7  3  22.50000'

这应该分开,以便按顺序将它们显示为所有数据的列表,即

['KIRKENES (CIV/MIL)', '-8.666667',  ... ,'HORNSUND RIVER', 'ENAN', '7.999998E-02', '93', ...., '22.50000']

我尝试了几个正则表达式,但遗憾的是我没有运气, 当我试图仅获取浮点数和整数时,这是一个示例:

regex = '^-?\d*(.\d+)?$'
print re.findall(regex, met)

但它什么都没有!,我也尝试过这个用于科学数字,也没有任何结果!

regexSci = 're.findall('/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/', met)'

请注意,我想要一个正则表达式一次查找所有表单,但遗憾的是我甚至无法单独解析每个表单!

我做错了什么?以及如何完成这项工作?

1 个答案:

答案 0 :(得分:2)

根据我的理解,您可以分成2个或更多空格re.split()

In [1]: import re

In [2]: met = 'KIRKENES (CIV/MIL)              -8.666667       5.350000       5.866667      HORNSUND RIVER     ENAN      7.9999
    ...: 998E-02  93  85  2.0000000E-02  0.1600000      4.9999997E-02      -999.9000      -999.9000      8  7  3  22.50000'

In [3]: re.split(r"\s{2,}", met)
Out[3]: 
['KIRKENES (CIV/MIL)',
 '-8.666667',
 '5.350000',
 '5.866667',
 'HORNSUND RIVER',
 'ENAN',
 '7.9999998E-02',
 '93',
 '85',
 '2.0000000E-02',
 '0.1600000',
 '4.9999997E-02',
 '-999.9000',
 '-999.9000',
 '8',
 '7',
 '3',
 '22.50000']