簡體   English   中英

正則表達式將線路數據分為年份/溫度讀數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM