2016-09-14 161 views
2

使用python我試圖用正則表達式分塊的文本文件。該文本文件是這樣的:正則表達式不拆分Python

Block1 
    u 0.00 2.00 
    0.11 2.11 
Block2 
    v 0.00 2.01 
    0.01 2.11 
Block3 
    a 1.01 2.02 
    0.01 2.11 

我的正則表達式

re.split("(\bBlock1\b\n\s\s[u].*\n.*)", open('Blockfile.txt', "r").read()) 

然而,當我運行的代碼不會分裂。 在這裏看到我的正則表達式代碼:https://regex101.com/r/jW7oP4/2

謝謝!

+1

向我們展示整個程序,包括輸出,並解釋如何輸出不同於你想要的。發佈一行代碼並告訴我們「這行不通」並不足以滿足我們的需求。 –

+0

這個[regex](https://regex101.com/r/jW7oP4/3)可以幫忙嗎? –

回答

0

你不一定需要正則表達式,可以通過行線接近它檢查是否符合Block收集成果轉化的字典開始:

from collections import defaultdict 

data = defaultdict(list) 
with open("input.txt") as f: 
    for line in f: 
     if line.startswith("Block"): 
      key = line.strip() 
     else: 
      data[key].append(line.strip()) 

print(dict(data)) 

打印:

{ 
    'Block3': ['a 1.01 2.02', '0.01 2.11'], 
    'Block2': ['v 0.00 2.01', '0.01 2.11'], 
    'Block1': ['u 0.00 2.00', '0.11 2.11'] 
} 
+0

謝謝! 我在這一整天,所以我只是忘了,也有更簡單的方法來這個技巧。 – Jobias

0

始終,總是在Python中使用正則表達式時使用原始字符串。 \b意味着在一個字符串內反斜槓,它會被評估,你的正則表達式會被損壞。只需在字符串前添加一個'r'即可。 這將這樣的伎倆:

re.split(r"(\bBlock1\b\n\s\s[u].*\n.*)", open('Blockfile.txt', "r").read()) 
+0

感謝您的幫助!我確實忘了添加「r」,但它似乎還不好。但我認爲@alecxe解釋它的方式也應該如此! – Jobias

0

Split僅分割在其講話住該參數,例如:

拆分「此字符串」.split(" ")結果:

["this","string"] 

但用.split("s ")分割結果於:

["thi", "string"] 

不是:

["thi", "tring"] 

哪個是你的問題。您的代碼只會一次性得到(\bBlock1\b\n\s\s[u].*\n.*)

我建議使用多個分割函數或不同的函數,如translate

+0

感謝您的回答! 如果你看看我的正則表達式的例子,你可以看到它是一回事!或者你的意思是別的嗎? – Jobias