16

我对 python 和正则表达式很陌生,我想知道如何将电子邮件地址的第一部分提取到域名。例如,如果:

s='xjhgjg876896@domain.com'

我希望正则表达式结果是(考虑到所有“种类”的电子邮件 ID,即包括数字等):

xjhgjg876896

我得到了正则表达式的想法——因为我知道我需要扫描到“@”然后存储结果——但我不确定如何在 python 中实现它。

谢谢你的时间。

4

11 回答 11

57

您应该只使用split字符串的方法:

s.split("@")[0]
于 2013-03-04T20:28:47.447 回答
4

正如其他人指出的那样,更好的解决方案是使用split.

如果您真的热衷于使用,regex那么这应该可以:

import re

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

它打印出来

foo

注意:这仅适用于SOMEONE@SOMETHING.TLD. 如果要匹配类型的电子邮件,NAME<SOMEONE@SOMETHING.TLD>则需要调整正则表达式。

于 2013-03-04T20:38:19.743 回答
3

您不应该使用正则表达式或split.

local, at, domain = 'john.smith@example.org'.rpartition('@')
于 2019-03-13T16:29:23.500 回答
1
#!/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('foo.goo@bar.com')

输出 :

Username :  foo.goo
Domain   :  bar
Type     :  com
于 2018-03-10T08:10:07.720 回答
1

这是另一种方法,使用索引方法。

s='xjhgjg876896@domain.com'

# Now lets find the location of the "@" sign
index = s.index("@")

# Next lets get the string starting from the begining up to the location of the "@" sign.
s_id = s[:index]

print(s_id)

输出是

xjhgjg876896
于 2020-03-05T20:03:17.380 回答
1

需要安装包 pip install email_split

from email_split import email_split
email = email_split("ssss@ggh.com")
print(email.domain)
print(email.local)
于 2021-02-02T12:36:59.190 回答
0

几个月前写了EmailExtractor.py。您可能想尝试一下并根据需要对其进行修改。它提取电子邮件地址。您可以使用“@”(推荐)拆分输出或修改正则表达式。

于 2013-03-04T21:04:25.403 回答
0

下面应该可以帮助你做到这一点:

 fromAddr = message.get('From').split('@')[1].rstrip('>')
        fromAddr = fromAddr.split(' ')[0]
于 2013-05-15T14:08:27.013 回答
0

您也可以尝试使用 email_split。

from email_split import email_split
email = email_split('xjhgjg876896@domain.com')
email.local  # xjhgjg876896
email.domain  # domain.com

你可以在这里找到更多https://pypi.org/project/email_split/。祝你好运 :)

于 2018-11-09T21:57:26.800 回答
0

好的答案已经得到了回答,但我还是想把我的。

  • 如果我有一封电子邮件 john@gmail.com,我只想得到“john”。

    我只想得到“约翰”

  • 如果我有一封电子邮件 john.joe@gmail.com 我只想得到“john”

    我只想得到“约翰”

所以这就是我所做的:

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

干杯

于 2016-05-22T22:59:44.003 回答
0

您可以找到电子邮件中的所有单词,然后返回第一个单词。

import re
def returnUserName(email):
    return re.findall("\w*",email)[0]

print(returnUserName("johns123.ss@google.com"))   #Output is - johns123
print(returnUserName('xjhgjg876896@domain.com'))  #Output is - xjhgjg876896
于 2021-10-30T03:50:43.617 回答