2017-08-16 93 views
1

我有一個大的文本類似下面的摘錄之間尋找文字:兩個字符串

test = ''' 
Sra. Montero.- ¡No, no! No empecemos. 
Sr. Jefe de Gabinete de Ministros.- Respetuosamente se lo digo... 
Sra. Montero.- El senador Fernández 
Sra. Montero.- ¡No, no! No empecemos. 
Sr. Jefe de Gabinete de Ministros.- Respetuosamente se lo digo... 
Sra. Montero.- El senador Fernández 
Sra. Montero.- ¡No, no! No empecemos. 
Sr. Jefe de Gabinete de Ministros.- Respetuosamente se lo digo... 
Sra. Montero.- El senador Fernández 
Sra. Montero.- ¡No, no! No empecemos. 
Sr. Jefe de Gabinete de Ministros.- Respetuosamente se lo digo... 
Sra. Montero.- El senador Fernández 
''' 

我想獲得的所有字符串「老德人Jefe德Gabinete Ministros.-」之間的文本字符串「Sr {{random_text_here}} .-」。因此,在這個例子中,我想獲得將是以下內容:

data = ['Respetuosamente se lo digo...', 'Respetuosamente se lo digo...', 'Respetuosamente se lo digo...'] 

我知道正則表達式子句是不可貪婪,我已經測試過這樣的事情:

bw_sr = re.compile('\.\-(.+?)Sr[.+]\.\-') #non greedy regexx    
data = bw_sr.findall(test) 

但我最終得到一個空的列表。我嘗試了幾個條款,但我似乎無法得到解決方案。

+0

你輸出的數據代表了每個後立即來到這些字符串,而不是字符串之間的內容。 – sln

回答

0

你的正則表達式是錯誤的(這一個[.+]之間的括號內定義了一個字符範圍,所以它沒有工作,除其他問題,像無法區分「老」和「Sra」(似乎你希望看到輸出),我通過做Sr\.修復)。

我想出了一個符合公式和「El senadorFernández」等的標準......沒有標準來過濾這些公式。我捕獲組之前還增加\s*爲「條」空白:

bw_sr = re.compile('\.\-\s*(.+?)\nSr\..+?\.\-') 
data = bw_sr.findall(test) 

print(data) 

結果:

['¡No, no! No empecemos.', '¡No, no! No empecemos.', '¡No, no! No empecemos.', '¡No, no! No empecemos.'] 
0

它的工作:

bw_sr = re.compile('\.\- (.*)') 
data = bw_sr.findall(test)