2013-03-04 14 views
5

Jestem całkiem nowy dla Pythona i regex i zastanawiałem się, jak wyodrębnić pierwszą część adresu e-mail do nazwy domeny. Tak na przykład, jeśli:python regex dostać pierwszą część adresu e-mail

s='[email protected]' 

Chciałbym regex wynik należy (biorąc pod uwagę wszystkie „rodzaje” identyfikatorów pocztowych czyli w tym numery itp ..):

xjhgjg876896 

mam pomysł z regex - jak w Wiem, że muszę skanować do "@", a następnie przechowywać wynik - ale nie jestem pewien, jak zaimplementować to w python.

Dzięki za poświęcony czas.

+0

Czy musisz używać wyrażenia regularnego (np. Jako część zadania domowego lub czegoś podobnego)? Czy po prostu zgadujesz, że nie ma innego sposobu, aby to zrobić? – abarnert

+0

Jeśli musisz użyć wyrażenia regularnego, musisz przeczytać samouczek na ich temat oraz na module Python 're'. Gdybym tylko powiedział "Użyj' re.match ('^ (. *?) @', S) '", nie wiedziałbyś, jak użyć rzeczy, która wraca, jak ją debugować lub rozszerzyć itd., więc o co ci chodzi? – abarnert

+0

Czy chcesz również przeanalizować te prawidłowe adresy e-mail: 'Tony Snow <[email protected]>' i '(tony snow) tony @ example.com'? Co chcesz zwrócić z 'tony% example.com @ example.org'? Obecny standard formatu adresu e-mail znajduje się tutaj: http://www.rfc-editor.org/rfc/rfc5322.txt –

Odpowiedz

28

Należy po prostu użyć metody split ciągów:

s.split("@")[0] 
+2

Nie będzie działać w przypadku wiadomości e-mail takich jak * John Smith <[email protected]> * –

+0

@MaksymPolshcha: PO nie określił, że było to możliwe wejście. –

+0

To nie jest wyrażenie regularne, o co prosił OP. –

4

Jak inni zwrócili uwagę, lepszym rozwiązaniem jest użycie split.

Jeśli naprawdę zależy na użyciu regex wtedy to powinno działać:

import re 

regexStr = r'^([^@]+)@[^@]+$' 
emailStr = '[email protected]' 
matchobj = re.search(regexStr, emailStr) 
if not matchobj is None: 
    print matchobj.group(1) 
else: 
    print "Did not match" 

i wypisuje

foo 

UWAGA: ta będzie działać tylko z łańcuchami emailowe [email protected]. Jeśli chcesz dopasować wiadomości e-mail typu NAME<[email protected]>, musisz dostosować wyrażenie regularne.

+0

Działa świetnie .. naprawiono niektóre literówki i inne małe rzeczy, ale działa dobrze .. pobiera "firstpart" i pobiera "firstpart.withdot" przed znakiem @. –

0

Kilka miesięcy temu napisano EmailExtractor.py. Możesz go wypróbować i zmodyfikować w razie potrzeby. Wydobywa adres e-mail. Możesz podzielić dane wyjściowe na "@" (zalecane) lub zmodyfikuj wyrażenie regularne.

-1

poniżej powinny pomóc to zrobić:

fromAddr = message.get('From').split('@')[1].rstrip('>') 
     fromAddr = fromAddr.split(' ')[0] 
0

dobre odpowiedzi zostały już odpowiedział, ale chcę, aby umieścić mój zapas.

  • Jeśli mam adres e-mailowy [email protected], chcę uzyskać "john".

    chcę uzyskać tylko "John"

  • Jeśli mam [email protected] email.com chcę się po prostu "John"

    chcę uzyskać tylko "John"

więc to, co zrobiłem:

name = recipient.split("@")[0] 
name = name.split(".")[0] 
print name 

okrzyki

0
#!/usr/bin/python3.6 


def email_splitter(email): 
    username = email.split('@')[0] 
    domain = email.split('@')[1] 
    domain_name = domain.split('.')[0] 
    domain_type = domain.split('.')[1] 

    print('Username : ', username) 
    print('Domain : ', domain_name) 
    print('Type  : ', domain_type) 


email_splitter('[email protected]') 

Wyjście:

Username : foo.goo 
Domain : bar 
Type  : com