正则表达式将行数据拆分为年份/温度读数

2024-04-25 23:35:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python脚本,将一些数据文件解析为geojson数据。你知道吗

现在,我有很多行,每行以一年开始,然后有12个温度读数(每个月一个),例如:

1983   5.2  -0.4   5.7   9.8  13.7  18.1  22.1  19.8  15.1  10.2   4.8   1.1 
1984   1.9   0.5   2.8   8.9  13.7  15.0  16.9  19.2  13.5  11.3   4.6   0.7 
1985  -5.0  -2.8   4.0   8.8  15.6  15.2  19.0  18.4  14.3   9.9   2.0   4.4 
1986   0.4  -6.4   3.8   7.4  15.9  17.4  19.4  18.2  12.3  10.3   7.1   2.5 

等等,我正在尝试写一个正则表达式,理想情况下,一年将进入第一个捕获组,然后所有的温度将进入下一个组,或者它们将进入单独的组。在第一种情况下,我将根据空格进行拆分,然后分别解析它们。在第二步中,我将逐个解析每个捕获组。你知道吗

我现在已经试过了,但它不起作用(要演示的缩小示例):

import re
reYear = re.compile("([0-9][0-9][0-9][0-9])([\s]*[\-]*[0-9]+[\s]*)*")
line = "1983   5.2  -0.4   5.7   9.8  13.7  18.1  22.1  19.8  15.1  10.2   4.8   1.1"
data = reYear.search(line)
print("GROUP 0: %s" % data.group(0))
print("GROUP 1: %s" % data.group(1))

这是我得到的结果:

GROUP 0: 1983   5
GROUP 1: 1983

我认为这可能是可行的,因为第一组()表示捕获4个数字,第二组表示捕获减号(或不减号)、数字和空格的一些实例。但是我真的不知道我在做什么。谢谢你的帮助。你知道吗

谢谢你!你知道吗


Tags: 数据re脚本data数据文件geojsonlinegroup
1条回答
网友
1楼 · 发布于 2024-04-25 23:35:51

我建议使用.*来匹配行的其余部分。此外,d{4}是匹配四位数字的最简单方法:

import re

# Regex: (four digits) whitespace (the rest of the line)
reYear = re.compile("(\d{4})\s+(.*)")
line = "1983   5.2  -0.4   5.7   9.8  13.7  18.1  22.1  19.8  15.1  10.2   4.8   1.1"
data = reYear.search(line)

# Group 0 is everything
print("GROUP 0: %s" % data.group(0))

print("GROUP 1: %s" % data.group(1))
print("GROUP 2: %s" % data.group(2))

这将输出:

GROUP 0: 1983   5.2  -0.4   5.7   9.8  13.7  18.1  22.1  19.8  15.1  10.2   4.8   1.1
GROUP 1: 1983
GROUP 2: 5.2  -0.4   5.7   9.8  13.7  18.1  22.1  19.8  15.1  10.2   4.8   1.1    

话虽如此,您可以将整行内容拆分为空格,并将第一个元素作为年份,而完全不使用regex。你知道吗

相关问题 更多 >