[英]Regex to split line data into year / temperature readings
我正在编写一个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位数字,第二个组说捕获负号(或不负号)的一些实例,一些数字,然后捕获空白。 但是我真的不知道我在做什么。 感谢任何帮助。
谢谢!
我建议使用。*来匹配行的其余部分。 另外,\\ 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
说了这么多,您可以将整个行分隔在空白处,并将第一个元素作为年份,而根本不使用正则表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.