2017-10-02 2 views
-1

Ich versuche, eine Liste von E-Mails aus einem bestimmten Text zu extrahieren. Die meisten E-Mails hat die folgende Syntax:E-Mails aus einem bestimmten Text extrahieren

"Last_name, First_Name (First-name)" <[email protected]> 
or 
"Last_name, First_Name (XXXX)" <[email protected]> 

Mein Ziel ist es, die gesamte E-Mails, die den ersten Teil zu extrahieren, das heißt die „Last_name, First_Name (XXXX)“.

die Liste der E-Mails zu extrahieren, habe ich die folgende regex verwendet:

"(<?[a-z0-9!#$%&*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`" 
"{|}~-]+)*(@|\sat\s)(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(\.|" 
"\sdot\s))+[a-z0-9](?:[a-z0-9-]*[a-z0-9]>?)?)" 

, die nur die E-Mails ohne den ersten Teil zu extrahieren. Was bedeutet, dass Extrakt nur das:

<[email protected]> 

Ich habe mehrere Varianten der regex versucht, den ersten Teil zu extrahieren, aber leider ist sie nicht.

Bitte zögern Sie nicht, wenn Sie einen Vorschlag haben. Vielen Dank im Voraus.

+1

Sind die E-Mail-Strings in '<...>' gespeichert? Wenn ja, extrahiere einfach '<.*?>'? –

+1

Haben Sie Beispiel-E-Mails, aus denen die E-Mail-Informationen extrahiert werden sollen? Wenn ja, posten Sie hier die vollständige Eingabe und lassen Sie uns genau wissen, wie die Ausgabe aussehen soll (unter Annahme mehrerer Eingaben, da es scheinbar mehrere Formate gibt). Versuchen Sie auch, Gruppen zu erfassen? Möchtest du den Vornamen, den Nachnamen und die E-Mail Adresse? Und in welchem ​​Format willst du das letztere? – ctwheels

Antwort

0

Zuerst diesen Link überprüfen, wo Sie Ihre Regex mit einem schönen Memo um es

https://regex101.com

Dann, so etwas wie

„[a-zA-Z _] + testen können, [a-zA-Z_()] + "

Sollte der erste Teil erfassen, vielleicht können Sie uns noch mehr Test-Text geben?

+0

Dies ist kaum eine Antwort: Siehe https://stackoverflow.com/help/how-to-answer. Da das OP nicht genügend Kontext zur Beantwortung der Frage lieferte, sollte dies eigentlich nur ein Kommentar sein. – ctwheels

+0

Stacks, erlaubt mir nicht, den Hauptbeitrag zu kommentieren): –

0
>>> import re 
>>> 
>>> emailLine='"Last_name, First_Name (First-name)" <[email protected]>' 
>>> 
>>> re.findall('^\"([^,]*?),\s([^"]*?)"\s<([^>]*?)>',emailLine) 

[('Last_name', 'First_Name (First-name)', '[email protected]')] 
+0

Vielen Dank, aber ich kann mehr als eine E-Mail pro Zeile in meinem haben Fall .. Ich habe versucht mit Ihrer Regex, aber es gibt nur das erste Vorkommen zurück. – Djo

+0

Wenn jede Zeile das gleiche Muster hat, müssen Sie nacheinander über die Zeilen iterieren. Konvertieren Sie die Datei in eine Liste. [Siehe hierzu] (https://stackoverflow.com/questions/3925614/how-do-you-read-a-file-into-a-list-in-python) –

+0

Verwenden Sie den folgenden Regex (nur wenn alle Vorkommen sind im gleichen Muster), um irgendwo in der Datei übereinzustimmen, wenn Sie nicht in Zeilen aufteilen möchten. \ "([^,] *?), \ s ([^ \"] *?) \ "\ s <([^>] *?)> –

Verwandte Themen