使用 Python 正则表达式分隔整数、浮点数和科学数字以及名称
Separating integers, floats, and scientific numbers as well as names using Python regular expressions
我有一个包含气象数据的文本文件,其中包括站点名称、纬度、温度、压力等字段。
所有站的数据在一行中如下
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)'
请注意,我想要一个正则表达式一次找到所有表单,但遗憾的是我什至未能分别解析每个表单!
我做错了什么?以及如何完成这项工作?
据我了解,您可以 拆分 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']
我有一个包含气象数据的文本文件,其中包括站点名称、纬度、温度、压力等字段。 所有站的数据在一行中如下
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)'
请注意,我想要一个正则表达式一次找到所有表单,但遗憾的是我什至未能分别解析每个表单!
我做错了什么?以及如何完成这项工作?
据我了解,您可以 拆分 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']