如何从“<”和“>”之间提取电子邮件地址?

2024-09-30 19:21:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有来自Outlook的电子邮件和姓名列表,以分号分隔,如下所示:

fname lname <email>; fname2 lname2 <email2>; ... ; fnameN lnameN <emailN>

我想提取电子邮件并用分号将它们分隔成这样:

^{pr2}$

如何在Python中实现这一点?在


Tags: 列表电子邮件emailfname姓名outlooklnamepr2
3条回答

特定主题的变体:

s = 'fname lname <email>; fname2 lname2 <email2>; ... ; fnameN lnameN <emailN>'

print [ s[i+1 : i+s[i:].find('>')] for i,c in enumerate(s) if c == '<' ]

# OR

gen = ( i for i,c in enumerate(s) if c in '<>' )
print [ s[a+1:gen.next()] for a in gen]

Using regex:

import re
# matches everything which is between < and > (excluding them)
ptrn = re.compile("<([^>]+)>")
# findall returns ['email','email2']. Join concats them.
print '; '.join(ptrn.findall("fname lname <email>; fname2 lname2 <email2>;"))
# email; email2

使用列表理解:

em = "fname lname <email>; fname2 lname2 <email2>; fnameN lnameN <emailN>"
email_list = [entry.split()[-1][1:-1] for entry in em.split(';')]

# email_list:
# ['email', 'email2', 'emailN']

故障

^{pr2}$

首先,它用分号分隔原始字符串。在

entry.split()

接下来,它获取每个条目,再次拆分它,这次是按空格。在

entry.split()[-1]

接下来,它从分割中选择最后一个条目,即您的电子邮件。在

entry.split()[-1][1:-1]

这将接收您的电子邮件,电子邮件格式为“<email@addr.com>”,并选择尖括号中包含的字符串([1:-1]对应于从第二个字符到最后一个字符的选择)。在

相关问题 更多 >