2017-08-16 14 views
1

ich einen großen Text wie der folgende Auszug haben:Suche Text zwischen zwei Strings

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 
''' 

Ich möchte den gesamten Text zwischen dem String erhalten „Sr. Jefe de Gabinete de Ministros.-“ und die Zeichenfolge "Sr {{random_text_here}} .-". So in diesem Beispiel, was Ich mag würde wäre das erhalten folgend:

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

Ich weiß, dass die Regex-Klausel nicht gierig zu sein hat und ich schon so etwas wie dies getestet:

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

Aber Ich bekomme eine leere Liste. Ich habe mehrere Klauseln ausprobiert, aber ich kann nicht zu einer Lösung kommen.

+0

Sie sind Ausgangsdaten stellt dar, was unmittelbar nach jeder kommt von diesen Saiten, nicht was zwischen Saiten kommt. – sln

Antwort

0

Ihre Regex war falsch (diese [.+] war in Klammern, die einen Zeichenbereich definiert, so dass es nicht funktionierte, unter anderem, wie keine Möglichkeit, zwischen "Sr." und "Sra" zu unterscheiden (scheint was Sie wollte die Ausgabe sehen), was ich mit Sr\.) behoben habe.

Ich kam mit dem, der den Formeln und auch "El senador Fernández", usw. entspricht ... es gibt kein Kriterium, um diese zu filtern. Ich habe auch \s* vor der Erfassungsgruppe zu „Streifen“ Rohlinge:

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

print(data) 

Ergebnis:

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

Es ist Arbeit:

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