2017-03-17 44 views
0

所以我有一個純文本文件,我想用Python來找到所有的正則表達式,並與所有的結果列表。Python:一行一行地閱讀,找到正則表達式和組內工作

這是我試圖與交互式控制檯:

>>> import re 
>>> result = [] 
>>> file = open('guion.fountain') 
>>> for line in file: 
...  m = re.search("\[\[Prop\]\]\*(.*)\*", line) 
...  result.append(m.group(1)) 
... 
Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
AttributeError: 'NoneType' object has no attribute 'group' 

但我沒有運氣。它說m變量是NotType而不是正則表達式搜索的結果。

我在做什麼錯?

+0

在訪問'.group(1)'前檢查'if m:'。另外,你可能需要用'。*?'替換'。*'。如果預期的匹配跨越多行,請讀取內存中的整個文件,然後使用're.DOTALL'修飾符。 –

+0

你能分享你的文件的內容或幾行嗎? –

+1

你有沒有嘗試過一個更簡單的正則表達式,看看是否是這個問題? – klutt

回答

0

試圖逐行讀取文件中的行,使用with,並打開閱讀:

with open('guion.fountain', 'r') as file: 
     result = [] 
     for line in file: 
       m = re.search("\[\[Prop\]\]\*(.*)\*", line) 
       result.append(m.group(1)) 
.... 
0

如果re.search未能找到匹配,則返回None。因此,在訪問m.group(1)之前,先檢查if m:是個好主意。

另外,由於您的匹配跨越多行,您很可能需要將整個文件讀入內存。只需在編譯正則表達式時將.*替換爲.*?並使用re.DOTALL修飾符,以便.可以匹配換行符號。