2017-06-04 30 views
0

我正在嘗試使用RegEx從文件中讀取矩陣。該文件由幾個字符,\ n字符,空格和浮點數組成。我想讀取只有套三個或更多的連續浮點數。代碼的個例是如下:使用正則表達式讀取浮點矩陣

DATA.TXT

$Nodes 
5 
1 0 0 0 
2 1 0 0 
3 1 1 0 
4 0 1 0 
5 0.5 0.5 0 
$EndNodes 
$Values 
5 
1 1.5 3.6 
2 1.5 3.4 
3 1.5 3.3 
4 1.5 3.5 
5 1.5 3.1 
$EndValues 

在我read_file.py,我有:

def read_file(filename): 
    text = str() 
    with open(filename) as file: 
     lines = file.readlines() 
     for line in lines: 
      text += line 
    return text 

我READ_FILE功能的最終輸出是包含大串整個文本,所以我可以使用正則表達式來找到我喜歡的一切。 那麼,我想讀取所有三組數字(After $ Nodes \ n5和$ EndNodes \ n之前)。

我嘗試了很多東西,比如re.compile(r'\$Nodes (.*)\$EndNodes')和許多其他字符組合,但似乎沒有任何工作。

我需要什麼,到底,是一樣的東西:

list_of_nodes = [('1', '0', '0', '0'), ('2', '1', '0', '0'), ('3', '1', '1', '0'), ('4', '0', '1', '0'), ('5', '0.5', '0.5', '0')] 

任何幫助將apreciated。在此先感謝,

+0

請發佈準確的預期輸出。如果你確切的要求,它也會有所幫助。 –

+0

完成!剛剛更新了我所需要的問題。 – Gabs

+0

順便說一下,我仍然在學習ReGex,所以這篇文章(https://stackoverflow.com/questions/1870954/python-regular-expression-across-multiple-lines)對我來說太過先進了.. – Gabs

回答

0

你真的很接近。你寫的正則表達式可以和re.DOTALL標誌一起使用。在正則表達式中,.表示'除換行符以外的任何字符'。當您使用re.DOTALL標誌時,.也包含換行符。

Demo

+0

是的,它工作!謝謝!但是如果我需要閱讀三個浮動字符呢?是否有/ f或/f6.5(如在C printf中)? – Gabs

+0

你可以選擇一條線並在其上使用'split()'方法,即line.split()中'[float(x)for x')會給出'line'中的數字列表。 – 0605002

+0

是的,但我不想要單個數字,例如數字5(第二林)。我想了解'(\ d {3,})'...' – Gabs