2013-03-04 4 views
5

Я довольно новичок в python и regex, и мне было интересно, как извлечь первую часть адреса электронной почты до имени домена. Так, например, если:python regex получить первую часть адреса электронной почты

s='[email protected]' 

Я хотел бы регулярное выражение результата будет (принимая во внимание все «виды» по электронной почте идентификаторов, т.е. включая номер и т.д ..):

xjhgjg876896 

Я получаю идею регулярного выражения - как я знаю, мне нужно сканировать до «@», а затем сохранять результат, но я не уверен, как реализовать это в python.

Спасибо за ваше время.

+0

Вы используете _need_ для использования регулярного выражения для этого (например, как часть задания на домашнюю работу или что-то еще)? Или вы просто догадываетесь, что нет другого способа сделать это? – abarnert

+0

Если вам нужно использовать регулярное выражение, вам нужно будет прочитать учебник по ним и модуль 're' Python. Если я просто сказал «Использовать' re.match ('^ (. *?) @', S) '", вы не знаете, как использовать возвращаемую вещь, как отлаживать или расширять ее и т. так что вы на самом деле? – abarnert

+0

Вы также хотите проанализировать эти действительные адреса электронной почты: 'Tony Snow <[email protected]>' и '(tony snow) tony @ example.com'? Что вы хотите вернуть из 'tony% example.com @ example.org'? Текущий формат для формата адреса электронной почты находится здесь: http://www.rfc-editor.org/rfc/rfc5322.txt –

ответ

28

Вы должны просто использовать метод split строк:

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

Это не будет работать для писем вроде * John Smith <[email protected]> * –

+0

@MaksymPolshcha: OP не указал, что это возможный ввод. –

+0

Это не регулярное выражение, как попросил ОП. –

4

Как уже отмечалось, лучшим решением является использование split.

Если вы действительно заинтересованы в использовании regex то это должно работать:

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" 

и распечатывает

foo 

ПРИМЕЧАНИЕ: Это будет работать только с почтовыми струнах [email protected]. Если вы хотите сопоставить электронные письма типа NAME<[email protected]>, вам необходимо настроить регулярное выражение.

+0

Он отлично работает. Исправлены некоторые опечатки и другие мелочи, но он хорошо работает. берет «первую часть» и принимает «firstpart.withdot» перед знаком @. –

0

Несколько месяцев назад написал EmailExtractor.py. Вам может понравиться попробовать и изменить его для ваших нужд. Он извлекает адрес электронной почты. Вы можете разделить результат на «@» (рекомендуется) или изменить регулярное выражение.

-1

Ниже должно помочь вам сделать это:

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

Хорошие ответы уже ответили, но я хочу поставить мину в любом случае.

  • Если у меня есть почта [email protected], я хочу получить только «john».

    я хочу, чтобы получить только "Джон"

  • Если у меня есть электронный [email protected]ком я хочу, чтобы получить только "Джон"

    я хочу, чтобы получить только "Джон"

так это то, что я сделал:

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

веселит

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

Выход:

Username : foo.goo 
Domain : bar 
Type  : com 
Смежные вопросы