正则表达式在python中拆分电子邮件地址

时间:2017-07-13 13:32:11

标签: python regex

我有这个:

email = 'serebro@gmail.com'

我想要一个正则表达式来得到这个:

output = ['serebro', 'gmail', 'com']

我给了一个电子邮件地址我想要一个包含名称,company_name及其域类型作为输出的列表

我可以这样做:

regex_1 = re.compile("(?:@|^)[^@]*")
regex_1.findall("serebro@gmail.com")

给了我:

['serebro', '@google.com']

我如何在python中获取['serebro', 'gmail', 'com']

5 个答案:

答案 0 :(得分:3)

我建议

import re
email = 'serebro@gmail.com'
print(re.findall(r'(.+)@(.+)\.(.+)', email))
# => [('serebro', 'gmail', 'com')]

请参阅Python demo

或者re.search可能会更好(demo):

import re
email = 'serebro@gmail.com'
m = re.search(r'(.+)@(.+)\.(.+)', email)
if m:
    print(list(m.groups()))
# => ['serebro', 'gmail', 'com']

(.+)@(.+)\.(.+)模式匹配并捕获到组1中的任何一个或多个字符,直到最后@(应该跟随任何0+字符和点,因为点是< em>强制性子模式),然后尽可能多地将任何字符捕获到第2组,直到最后.,然后匹配并捕获到第3组。

模式详情

  • (.+) - 捕获第1组:尽可能多地(贪婪地)匹配除换行符之外的任何1个或多个字符,直到后续子模式的 last 出现:
  • @ - 一个@(必须跟随一个或多个字符并且必须遵循强制性.
  • (.+) - 第2组与换行符之外的任何1个字符匹配,尽可能多,直到
  • \. - 后面跟着
  • 的字符串中的最后.
  • (.+) - 第3组匹配除了换行符之外的任何1个字符,直到字符串结尾。

请参阅regex demo

答案 1 :(得分:1)

您可以使用re.split()

import re
email = 'serebro@gmail.com'
output = re.split(r'[@.]', email)

答案 2 :(得分:1)

这应该有效:

import re
email = your.email@gmail.com
regex = re.search(r'([a-zA-Z0-9./-]+)@([a-zA-Z0-9./-]+)\.([a-z]+)', email)

regex.group(1) --> 'your.email'

regex.group(2) --> 'gmail'

regex.group(3) --> 'com'

答案 3 :(得分:0)

请记住,有效的电子邮件地址可能要复杂得多。 有趣的文章:http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx/

示例(来自本文):

Abc\@def@example.com
Fred\ Bloggs@example.com
Joe.\\Blow@example.com
"Abc@def"@example.com
"Fred Bloggs"@example.com
customer/department=shipping@example.com
$A12345@example.com
!def!xyz%abc@example.com
_somename@example.com

答案 4 :(得分:0)

对于那些不需要正则表达式的人,

email = 'serebro@gmail.com'
first_part, second_part = email.rsplit('@', 1)  # the real @ will be the last one
domain_name, tld = second_part.split('.', 1) 
print(first_part, domain_name, tld)
# => serebro gmail com