2016-06-19 43 views
1

我正在編寫一個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位數字,第二個表示捕獲一些負號(或不),一些數字和一些空白的實例。但是我不知道我在做什麼。感謝任何幫助。

謝謝!

回答

2

我建議使用。*來匹配行的其餘部分。此外,\ 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  

說了這麼多,你可能只是劈在空白整條生產線,並採取作爲年份的第一個元素,並且根本不使用正則表達式。

+0

謝謝!這是有效的 - 你說得對,我可以分開線路,但現在知道正則表達式很酷。謝謝! –