我有这个:
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']
答案 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