python - print - Estrai sotto-stringhe e-mail dal documento di grandi dimensioni




string[< in>] python (4)

Ho un file .txt molto grande con centinaia di migliaia di indirizzi e-mail sparsi ovunque. Tutti prendono il formato:

...<[email protected].com>...

Qual è il modo migliore per fare in modo che Python riesca a scorrere l'intero file .txt alla ricerca di tutte le istanze di una determinata stringa @domain, quindi prendere l'intero indirizzo all'interno di <...> e aggiungerlo a una lista? Il problema che ho è con la lunghezza variabile di diversi indirizzi.


È inoltre possibile utilizzare quanto segue per trovare tutti gli indirizzi e-mail in un testo e stamparli in un array o ogni e-mail su una riga separata.

import re
line = "why people don't know what regex are? let me know [email protected], [email protected] " \
       "[email protected],[email protected]"
match = re.findall(r'[\w\.-][email protected][\w\.-]+', line)
for i in match:
    print(i)

Se vuoi aggiungerlo a una lista, stampa la "partita"

questo stamperà la lista

print(match)

Spero che questo ti aiuti.


Ecco un altro approccio per questo problema specifico, con una regex da emailregex.com :

text = "blabla <[email protected]>><[email protected]> <[email protected]> bla bla <[email protected]>"

# 1. find all potential email addresses (note: < inside <> is a problem)
matches = re.findall('<\S+?>', text)  # ['<[email protected]>', '<[email protected]>', '<[email protected]>', '<[email protected]>']

# 2. apply email regex pattern to string inside <>
emails = [ x[1:-1] for x in matches if re.match(r"(^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)", x[1:-1]) ]
print emails   # ['[email protected]', '[email protected]', '[email protected]']


import re
rgx = r'(?:\.?)([\w\-_+#~!$&\'\.]+(?<!\.)(@|[ ]?\(?[ ]?(at|AT)[ ]?\)?[ ]?)(?<!\.)[\w]+[\w\-\.]*\.[a-zA-Z-]{2,3})(?:[^\w])'
matches = re.findall(rgx, text)
get_first_group = lambda y: list(map(lambda x: x[0], y))
emails = get_first_group(matches)

Per favore non odiarmi per aver provato questa infame regex. La regex funziona per una buona porzione di indirizzi email mostrati sotto. Ho usato principalmente questo come base per i caratteri validi in un indirizzo email.

Sentiti libero di giocarci qui

Ho anche realizzato una variazione in cui la regex cattura le email come name at example.com

(?:\.?)([\w\-_+#~!$&\'\.]+(?<!\.)(@|[ ]\(?[ ]?(at|AT)[ ]?\)?[ ])(?<!\.)[\w]+[\w\-\.]*\.[a-zA-Z-]{2,3})(?:[^\w])






string