Регулярные выражения Python, найти почтовый домен в адресе - PullRequest
16 голосов
/ 12 апреля 2011

Я знаю, что я идиот, но я не могу вытащить домен из этого адреса электронной почты:

'blahblah@gmail.com'

Мой желаемый результат:

'@gmail.com'

Мой текущий вывод:

.

(это просто символ точки)

Вот мой код:

import re
test_string = 'blahblah@gmail.com'
domain = re.search('@*?\.', test_string)
print domain.group()

Вот что, по-моему, говорит мое регулярное выражение ('@ * ?.', test_string):

 ' # begin to define the pattern I'm looking for (also tell python this is a string)

  @ # find all patterns beginning with the at symbol ("@")

  * # find all characters after ampersand

  ? # find the last character before the period

  \ # breakout (don't use the next character as a wild card, us it is a string character)

  . # find the "." character

  ' # end definition of the pattern I'm looking for (also tell python this is a string)

  , test string # run the preceding search on the variable "test_string," i.e., 'blahblah@gmail.com'

Я основываюсь на определениях здесь:

http://docs.activestate.com/komodo/4.4/regex-intro.html

Кроме того, я искал, но другие ответы были слишком сложны для меня, чтобы обдумать.

Помощь, как обычно, высоко ценится. Спасибо.

Мои вещи, если это имеет значение:

Windows 7 Pro (64 бит)

Python 2.6 (64 бит)


PS. Задание StackOverflow: Мои посты не содержат новых строк, если я не нажму "возврат" дважды между ними. Например (это все в другой строке, когда я пишу):

@ - найти все паттерны, начинающиеся с символа at ("@") * - найти все символы после амперсанда ? - найти последний символ перед точкой \ - прорыв (не используйте следующий символ в качестве символа подстановки, если это символ строки) , - Найти "." персонаж , тестовая строка - запустить предыдущий поиск по переменной «test_string», т.е. «blahblah@gmail.com»

Вот почему я получил пустую строку ч / б каждую строку выше. Что я делаю неправильно? Thx.

Ответы [ 5 ]

20 голосов
/ 12 апреля 2011

Вот кое-что, что, я думаю, могло бы помочь

import re
s = 'My name is Conrad, and blahblah@gmail.com is my email.'
domain = re.search("@[\w.]+", s)
print domain.group()

вывод

@gmail.com

Как работает регулярное выражение:

@ - сканируйте, пока не увидите этот символ

[\w.] набор символов для возможного совпадения, поэтому \w - это все буквенно-цифровые символы, а завершающий период . добавляет к этому набору символов.

+ один илибольше из предыдущего набора.

Поскольку это регулярное выражение соответствует символу точки и каждому буквенно-цифровому символу после @, оно будет соответствовать доменам электронной почты даже в середине предложений.

13 голосов
/ 12 апреля 2011

Хорошо, так почему бы не использовать сплит? (или раздел)

"@"+'blahblah@gmail.com'.split("@")[-1]

Или вы можете использовать другие строковые методы, такие как find

>>> s="bal@gmail.com"
>>> s[ s.find("@") : ]
'@gmail.com'
>>>

и если вы собираетесь извлечь адреса электронной почты из другого текста

f=open("file")
for line in f:
    words= line.split()
    if "@" in words:
       print "@"+words.split("@")[-1]
f.close()
6 голосов
/ 12 апреля 2011

Использование регулярных выражений:

>>> re.search('@.*', test_string).group()
'@gmail.com'

Другой способ:

>>> '@' + test_string.split('@')[1]
'@gmail.com'
2 голосов
/ 03 июля 2018

Используя регулярное выражение ниже, вы можете извлечь любой домен, например .com или .in.

import re
s = 'my first email is user1@gmail.com second email is enter code hereuser2@yahoo.in and third email is user3@outlook.com'
print(re.findall('@+\S+[.in|.com|]',s))

выход

['@gmail.com', '@yahoo.in']
2 голосов
/ 20 марта 2014

Просто хотел указать, что метод chrisaycock будет сопоставлять недействительные адреса электронной почты в форме

herp@

, чтобы правильно убедиться, что вы просто сопоставляете возможное действительное письмо с доменом, который вам нужно немного изменить

Использование регулярных выражений:

>>> re.search('@.+', test_string).group()
'@gmail.com'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...