2017-05-30 4 views
1

Ich versuche, die Zitate und ihre jeweiligen Autoren in einem langen Text zu erhalten.Finde das letzte Vorkommen eines Namens aus einer Liste vor einem zitierten Text

Beispiel: Paul […] Jane says G_quoted text_R

Wie kann ich Jane und ihr zitierten Text in zwei Gruppen, aber nicht Paul usw.

habe ich versucht, einige positive Vorschau wie dieses, aber ich erhalte alle Namen, nicht nur Jane. Vielen Dank für Ihre Hilfe.

i?(Paul|Jane|Robert|John)(?=[^.]*?G_(.*)_R) 

https://regex101.com/r/mx0JgV/1

+0

Warum Look-Ahead? Müssen Sie nur Text bis zu "Jane" konsumieren und nicht weiter, oder "Jane" muss die Übereinstimmung der gesamten Regex und nicht einer Gruppe sein, oder eine andere seltsame Anforderung? –

+0

kann ich nicht gut verstehen ... Wenn Sie nur "Jane" brauchen, warum fügen Sie "Paul" und andere Namen hinzu? Und warum Ihr zitierter Text nicht von (") aber" G_ "und" _R "eingeschlossen ist? – Sraw

+0

Ich möchte alle Zitate von den aufgelisteten Autoren erhalten. In diesem Beispiel ist es Jane, aber es wird Paul, Robert usw. sein andere Teile des Textes. "G_" und "_R" sind initilaly HTML-Tags und aber ich konvertierte zu Text – user3259111

Antwort

0

Was ist los mit:

import re 

QUOTE_FINDER = re.compile(r"(paul|jane|robert|john).*?G_(.*?)_R", re.IGNORECASE | re.DOTALL) 

data = """dfdsf Jane […] Paul […] Jane says G_quoted text_R 
and Paul says G_some other text_R while Robert prefers to say G_nothing_R...""" 

quotes = QUOTE_FINDER.findall(data) 
# [('Jane', 'quoted text'), ('Paul', 'some other text'), ('Robert', 'nothing')] 
+0

Vielen Dank @zwer! Das ist genau das, was ich gesucht habe. – user3259111

Verwandte Themen