2013-04-17 30 views
0

我用readlines來分割一個文件中的所有句子,我想用re.findall來通過並找到其中的首都。然而,我能得到的唯一結果是所有句子的一組首字母,但我想要一組文件中每個句子的首字母。在Python中使用re.findall輸出一組參數,而不是每行的一組參數

我正在使用for循環來嘗試此操作,但我不確定這是否是此任務的最佳操作過程。

輸入:

Line 01: HE went to the SHOP 
Line 02: THE SHOP HE went 

這是我收到作爲輸出:

[HE, SHOP, THE] 

,我想要得到的輸出:

[HE, SHOP], [THE, SHOP, HE] 

是否有辦法這樣做?我已經在下面的分鐘寫了我的編碼。謝謝!

import re, sys 

f = open('findallEX.txt', 'r') 

lines = f.readlines() 

ii=0 

for l in lines: 
    sys.stdout.write('line %s: %s' %(ii, l)) 
    ii = ii + 1 

for x in l 
    re.findall('[A-Z]+', l) 
print x 
+0

這不能是你的確切代碼。您的最後一個for-loop循環遍歷一行(最後一個來自前一個for循環)一次一個字符。 *在該循環中沒有打印或分配任何*。然後你打印一個字符。換句話說,這段代碼不能產生你所說的輸出:'[HE,SHOP,THE]'。請編輯您的問題以顯示您的實際代碼的更具代表性的示例。 –

回答

2

我想做到這一點的方法如下:

txt = """HE went to the SHOP 
THE SHOP HE went""" 

result = [] 
for s in txt.split('\n'): 
    result += [re.findall(r'[A-Z]+', s)] 

print(result) # prints [['HE', 'SHOP'], ['THE', 'SHOP', 'HE']] 

或者應用列表解析(有點不太可讀):

txt = """HE went to the SHOP 
    THE SHOP HE went""" 

print([re.findall(r'[A-Z]+', s) for s in txt.split('\n')]) 
+0

風格nit:命名你的循環字符'i'是一個壞主意,如果它不代表一個整數。在這裏,我會建議使用's'或'line'。 –

+0

'txt.splitlines()' –

0

如果數據真的是在形式(單詞完全大寫),你甚至不需要正則表達式。 isupper是你所需要的。

with open('findallEX.txt') as f: 
    for line in f.readlines(): 
     print [word for word in line.split() if word.isupper()] 

增加了一個例子。

相關問題