Python使用regex一次性从body中提取名称*和*电子邮件

2024-06-28 19:56:08 发布

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

Python3

我需要帮助创建一个正则表达式,从转发的电子邮件正文中提取姓名和电子邮件,它看起来总是与此类似(真实电子邮件被虚拟电子邮件替换):

> Begin forwarded message:
> Date: December 20, 2013 at 11:32:39 AM GMT-3
> Subject: My dummy subject
> From: Charlie Brown <aaa@aa-aaa.com>
> To: maria.brown@aaa.com, George Washington <george@washington.com>, =
thomas.jefferson@aaa.com, thomas.alva.edison@aaa.com, Juan =
<juan@aaa.com>, Alan <alan@aaa.com>, Alec <alec@aaa.com>, =
Alejandro <aaa@aaa.com>, Alex <aaa@planeas.com>, Andrea =
<andrea.mery@thomsen.cl>, Andrea <andrea.22@aaa.com>, Andres =
<andres@aaa.com>, Andres <avaldivieso@aaa.com>
> Hi,
> Please reply ASAP with your RSVP
> Bye

我的第一步是将所有电子邮件提取到一个带有自定义函数的列表中,我将整个电子邮件正文传递给该列表,如下所示:

^{pr2}$

几天前,我请求A question about extracting names using regex来帮助我构建提取所有名称的函数。我的想法是以后加入这两个组织。我接受了一个符合我要求的答案,并提出了另一个功能:

def extract_names(block_of_text):
 p = r'[:,] ([\w ]+) \<'
 return re.findall(p, block_of_text)

我现在的问题是让提取的名称与提取的电子邮件匹配,主要是因为有时名称比电子邮件少。所以我想,我最好尝试构建另一个正则表达式来提取姓名和电子邮件

这是我构建这样一个regex的失败尝试。在

[:,]([\w \<]+)([\w.-]+@[\w.-]+\.[\w.-]+)

REGEX101 LINK

有谁能帮我提出一个漂亮的、干净的正则表达式,既能抓取姓名又能抓取电子邮件,到元组列表或字典中去吗?谢谢

编辑: Python中regex的预期输出如下所示:

 [(Charlie Brown', 'aaa@aaa.com'),('','maria.brown@aaa.com'),('George Washington', 'george@washington.com'),('','thomas.jefferson@aaa.com'),('','thomas.alva.edison@aaa.com'),('Juan','juan@aaa.com',('Alan', 'alan@aaa.com'), ('Alec', 'alec@aaa.com'),('Alejandro','aaa@aaa.com'),('Alex', 'aaa@aaa.com'),('Andrea','andrea.mery@thomsen.cl'),('Andrea','andrea.22@aaa.com',('Andres','andres@aaa.com'),('Andres','avaldivieso@aaa.com')] 

Tags: 名称com列表电子邮件thomasregex姓名charlie