【问题标题】:Custom regex pattern for matching email addresses用于匹配电子邮件地址的自定义正则表达式模式
【发布时间】:2021-02-15 17:32:30
【问题描述】:

我有我正在阅读的内容,我需要从其中收集电子邮件。但是,我只想提取来自 From: 之后的电子邮件:

这是一个例子:

Recip: fhavor@gmail.com
Subject: Report results (Gd)
Headers: Received: from daem.com (unknown [127.1.1.1])
Date: Sat, 13 Feb 2021 13:11:42 +0000 (GMT)
From: Tavon Lo <lt35@gmail.com>

如您所见,有多封电子邮件,但我只想收集 From: 部分内容之后的电子邮件。这将是“lt35@gmail.com”。到目前为止,我有一个很好的正则表达式,可以收集内容中的所有电子邮件。

   EMAIL = r"((?:^|\b)(?:[^\s]+?\@(?:.+?)\[\.\][a-zA-Z]+)(?:$|\b))"

我是 regex 模式的新手,因此对于如何改进上述模式以仅收集来自以下的电子邮件的任何想法或建议:将不胜感激!

【问题讨论】:

    标签: python python-3.x regex


    【解决方案1】:

    你可以使用

    (?m)^From:[^<>\n\r]*<([^<>@]+@[^<>]+)>
    

    请参阅regex demo

    详情

    • (?m) - re.M 内联修饰符选项
    • ^ - 行首
    • From: - 文字字符串
    • [^&lt;&gt;\n\r]* - 除了&lt;&gt;、CR 和 LF 之外的零个或多个字符
    • &lt; - 一个 &lt; 字符
    • ([^&lt;&gt;@]+@[^&lt;&gt;]+) - 第 1 组:除 &lt;&gt;@ 之外的一个或多个字符,然后是 @ 字符,然后是除 &lt;&gt; 之外的一个或多个字符
    • &gt; - 一个 &gt; 字符。

    查看 Python 演示:

    import re
    rx = re.compile(r'^From:[^<>\n\r]*<([^<>@]+@[^<>]+)>', re.M) # Define the regex
    
    with open(your_file_path, 'r') as f:  # Open file for reading
      print(rx.findall(f.read()))         # Get all the emails after From:
    

    【讨论】:

    • 这确实有效。问题-如果我想包括“发件人:”我将如何实现。所以如果它以“发件人:”或“发件人:”开头,它会收到电子邮件吗?会是这样吗 - (?m)^From:|Sender:[^\n\r]*@]+@[^]+)>
    • @CoderGuru 见this regex demo
    • 快速问题 - 如果发件人之后没有姓名怎么办 (Tavon Lo)。只是发件人:something@gmail.com。我试过 (?m)^Sender:[^\n\r]*([^@]+@[^]+) 但无济于事.有什么想法吗?
    • @CoderGuru 对不起,我不太明白,你在做什么。也许(?m)^Sender:[^\S\n\r]*([^\s@]+@\S+),见demo
    • 就是这样。现在有没有办法将两者结合起来?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2011-08-17
    • 2016-12-23
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多