【问题标题】:Extract emails from a given text从给定文本中提取电子邮件
【发布时间】:2018-03-13 16:24:59
【问题描述】:

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

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

我的目标是提取整个电子邮件,包括第一部分,即“姓氏,名字(XXXX)”。

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

"(<?[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>

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

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

【问题讨论】:

  • 电子邮件字符串是否位于&lt;...&gt; 中?如果是这样,只需提取&lt;.*?&gt;?
  • 您是否有应从中提取电子邮件信息的示例电子邮件?如果是这样,请在此处发布完整的输入,让我们确切地知道输出应该是什么(假设有多个输入,因为似乎有多种格式)。另外,您是否尝试分组?您想要名字、姓氏和电子邮件吗?您希望后者采用哪种格式?

标签: python regex email


【解决方案1】:

首先,检查那个链接,你可以在其中测试你的正则表达式,并附上一个漂亮的备忘录

https://regex101.com

然后,像

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

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

【讨论】:

  • 这只是一个答案:见stackoverflow.com/help/how-to-answer。看到 OP 如何没有提供足够的上下文来回答这个问题,这应该只是一个评论
  • 堆,不允许我评论主帖):
【解决方案2】:
 >>> 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')]

【讨论】:

  • 谢谢,但在我的情况下,每行可以有多个电子邮件。我尝试使用您的正则表达式,但它只返回第一次出现。
  • 如果每一行都有相同的模式,那么你需要逐行迭代。将文件转换为列表。 See this
  • 如果您不想拆分成行,请使用下面的正则表达式(仅当所有出现都处于相同模式时)匹配文件中的任何位置。 \"([^,]*?),\s([^\"]*?)\"\s]*?)>
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2014-03-23
相关资源
最近更新 更多