Python 如何从“”之间提取电子邮件地址?
我有一个Outlook的电子邮件和姓名列表,以分号分隔,如下所示:Python 如何从“”之间提取电子邮件地址?,python,email,string-formatting,text-processing,Python,Email,String Formatting,Text Processing,我有一个Outlook的电子邮件和姓名列表,以分号分隔,如下所示: fname lname <email>; fname2 lname2 <email2>; ... ; fnameN lnameN <emailN> email1; email2; ... ; emailN 如何在Python中实现这一点 使用列表理解: em = "fname lname <email>; fname2 lname2 <email2>; fnameN
fname lname <email>; fname2 lname2 <email2>; ... ; fnameN lnameN <emailN>
email1; email2; ... ; emailN
如何在Python中实现这一点
使用列表理解:
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']
首先,它用分号将原始字符串拆分
entry.split()
接下来,它将获取每个条目,再次拆分,这次是按空格
entry.split()[-1]
接下来,它从拆分中选择最后一个条目,即您的电子邮件
entry.split()[-1][1:-1]
这将接收您的电子邮件,其格式为,并选择尖括号[1:-1]中包含的字符串,对应于从第二个字符到第二个字符到最后一个字符的选择。给定主题的变体:
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]
最后,是一个适合正则表达式的任务。很高兴知道有另一种方法来思考这个问题。谢谢
entry.split()[-1][1:-1]
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]