从给定文本中提取电子邮件

时间:2017-10-02 15:01:29

标签: python regex email

我正在尝试从给定文本中提取电子邮件列表。大多数电子邮件具有以下语法:

 "Last_name, First_Name (First-name)" <last_name.first_name@domain.xxx>
or
"Last_name, First_Name (XXXX)" <last_name.first_name@domain.xxx>

我的目标是提取整个电子邮件,包括第一部分,即&#34; Last_name,First_Name(XXXX)&#34;。

要提取电子邮件列表,我使用了以下正则表达式:

"(<?[a-z0-9!#$%&*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`"
"{|}~-]+)*(@|\sat\s)(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(\.|"
"\sdot\s))+[a-z0-9](?:[a-z0-9-]*[a-z0-9]>?)?)"

仅提取没有第一部分的电子邮件。意思是只提取:

<last_name.first_name@domain.xxx>

我尝试了几种正则表达式的变体来提取第一部分但不幸的是它们没有用。

如果您有任何建议,请不要犹豫。先感谢您。

2 个答案:

答案 0 :(得分:0)

首先,检查一下您可以测试正则表达式的链接,并附上一份好的备忘录

https://regex101.com

然后,像

  

“[a-zA-Z _] +,[a-zA-Z_()] +”

应该捕获第一部分,也许你可以给我们一些更多的测试文本?

答案 1 :(得分:0)

 >>> import re
 >>>
 >>> emailLine='"Last_name, First_Name (First-name)" <last_name.first_name@domain.xxx>'
 >>>
 >>> re.findall('^\"([^,]*?),\s([^"]*?)"\s<([^>]*?)>',emailLine)

 [('Last_name', 'First_Name (First-name)', 'last_name.first_name@domain.xxx')]