【问题标题】:Regex Find email address between First Two Instances of Strings正则表达式在字符串的前两个实例之间查找电子邮件地址
【发布时间】:2021-05-10 01:35:45
【问题描述】:

我有来自一连串电子邮件的原始文本。

For all inquiries please reach out
From: abc@abc.com At: 01/27/21 23:29:28To: CompanyA
Cc: 123@123.com, 345@345-YYY.com Subject: this is the subject line
From: CompanyB(company) <mmm@mmm.net>
Sent: Wednesday, January 27, 2021 12:51 PM
From: 999@999.com At: 01/27/21 23:29:28To: CompanyA
Cc: 888@888.com, 777@777.com Subject: tect

通过正则表达式,我需要捕获第一个词 From 到第一个 Subject 之间的电子邮件地址。在上面的匹配应该是:
abc@abc.com
123@123.com
345@345-YYY.com

我确实有 (\n){0,1}([\w.]@[\w+-.]) 来获取电子邮件地址。我将通过 Python Regex Lib 进行匹配。

【问题讨论】:

    标签: python regex string text re


    【解决方案1】:

    一种选择是使用 2 种模式与 re.

    首先找到从From:到第一次出现Subject:的所有匹配项

    (?s)\bFrom:.*?\bSubject:
    

    然后对于所有这些匹配,获取电子邮件地址之类的模式而不匹配 &lt;&gt;

    [^<>\s@]+@[^@\s<>]+
    

    例子

    import re
    s = ("For all inquiries please reach out\n"
                "From: abc@abc.com At: 01/27/21 23:29:28To: CompanyA\n"
                "Cc: 123@123.com, 345@345-YYY.com Subject: this is the subject line\n"
                "From: CompanyB(company) <mmm@mmm.net>\n"
                "Sent: Wednesday, January 27, 2021 12:51 PM\n"
                "From: 999@999.com At: 01/27/21 23:29:28To: CompanyA\n"
                "Cc: 888@888.com, 777@777.com Subject: tect")
    
    for match in re.findall(r"(?s)\bFrom:.*?\bSubject:", s):
            print(re.findall(r"[^<>\s@]+@[^@\s<>]+", match))
    

    输出

    ['abc@abc.com', '123@123.com,', '345@345-YYY.com']
    ['mmm@mmm.net', '999@999.com', '888@888.com,', '777@777.com']
    

    如果您不想再次出现From:Subject,您可以使用否定前瞻来检查该行是否不包含任何字符串。

    ^From:.*(?:\r?\n(?!From|.*\bSubject:).*)*\r?\n.*\bSubject:
    

    Regex demo

    例子

    for match in re.findall(r"(?m)^From:.*(?:\r?\n(?!From|.*\bSubject:).*)*\r?\n.*\bSubject:", s):
            print(re.findall(r"[^<>\s@]+@[^@\s<>]+", match))
    

    输出

    ['abc@abc.com', '123@123.com,', '345@345-YYY.com']
    ['999@999.com', '888@888.com,', '777@777.com']
    

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 2013-07-06
      • 2013-04-09
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多