【问题标题】:Python Regex to Extract Email InformationPython 正则表达式提取电子邮件信息
【发布时间】:2021-11-24 09:27:30
【问题描述】:

我有以下数据,我想从中只检索消息男孩部分并删除与“转发”标题相关的所有信息。

---------------------- Forwarded by Phillip K Allen/HOU/ECT on 03/21/2000 
01:24 PM ---------------------------
 
 
Stephane Brodeur
03/16/2000 07:06 AM
To: Phillip K Allen/HOU/ECT@ECT
cc:  
Subject: Maps
 
As requested by John, here's the map and the forecast...
Call me if you have any questions (403) 974-6756.

到目前为止我尝试过的低于正则表达式。 matchObjj = re.search(r'(---.*?)Subject:', tmp_text, re.DOTALL)

当我使用以下命令打印时

print( tmp_text[matchObjj.span()[1]:])

我得到低于输出。

Maps
 
As requested by John, here's the map and the forecast...
Call me if you have any questions (403) 974-6756.

所以基本上问题是正则表达式没有删除“主题:”的完整行,只有标题主题:被删除,但实际的主题文本仍然存在,在这种情况下是“地图”。 我希望正则表达式检测到主题行末尾的文本,然后将其删除。请分享你的想法。

【问题讨论】:

    标签: python regex email


    【解决方案1】:

    最简单的方法应该是将您的正则表达式更改为:

    r'(---.*?)Subject:[^\n]*\n'
    

    这将使您的匹配一直延伸到下一个换行符,使其跨度的结尾成为下一行的开头。

    【讨论】:

    • 感谢 rk,它确实有效并得到了输出。
    • @AsadKamal 然后请接受作为答案
    【解决方案2】:

    您可以通过使用splitlines 创建一个句子列表并从主题行中分割此列表,从而在不使用正则表达式的情况下做到这一点:

    text = '''---------------------- Forwarded by Phillip K Allen/HOU/ECT on 03/21/2000 
    01:24 PM ---------------------------
     
     
    Stephane Brodeur
    03/16/2000 07:06 AM
    To: Phillip K Allen/HOU/ECT@ECT
    cc:  
    Subject: Maps
     
    As requested by John, here's the map and the forecast...
    Call me if you have any questions'''
    
    data = text.splitlines()
    slice_idx = [i for i, s in enumerate(data) if s.startswith('Subject: ')][0]
    body = '/n'.join(data[slice_idx+2:])
    

    输出:

    As requested by John, here's the map and the forecast...
    Call me if you have any questions
    

    【讨论】:

    • 我使用正则表达式的 RJ 原因是因为一个电子邮件线程可以包含多个转发块,并且在同一电子邮件线程中使用多个转发块会变得困难。
    【解决方案3】:

    主题行后有更多空格,或者您的情况可能有 \t 分隔。您可以尝试将大小写与两个或多个空格匹配。例如

    regexEquation = "(---.*?)Subject:[^\n]*(\s)+"
    

    您可以从herehere 获得匹配更多空格的帮助。

    **Output**: As requested by John, here's the map and the forecast...
    Call me if you have any questions (403) 974-6756.
    

    【讨论】:

    • UPD:它不会给你所需的结果,@rkechlos 的回答会很好。
    猜你喜欢
    • 2011-01-16
    • 2018-12-04
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多