Python分离字符串电子邮件消息线程中的对话

2024-03-28 21:03:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把回复和转发从邮件中分离出来。在

例如:

2013年7月31日下午5:15,John Doe写道:

> example email text
>
>
> *From:* Me [mailto:me@gmail.com]
> *Sent:* Thursday, May 31, 2012 3:54 PM
> *To:* John Doe
> *Subject:* RE: subject
>
> example email text
>
>> Dear David,
>> 
>> Greetings from Doha!
>> Kindly enlighten me. I am confused.
>> 
>> With regards,
>> Smith
>>
>>> Dear Smith,
>>>
>>> Happy New year!
>>> Love
>>>
>>>> Dear Mr Wong,
>>>> Greetings!
>>>> Yours,
>>>> O

上面的例子纯粹是虚构的,但格式是真实的。有些电子邮件包含多个对话。在

我已经尝试过https://github.com/zapier/email-reply-parser和其他包,但不幸的是,它们不能投入生产,因为性能不稳定。在

模式很清楚,可以通过计算“>;”的数量来分隔对话。我最初的想法是浏览整个文档,找出有多少个“>;”,然后将每个“>;”“>;”“>;”和“>;”作为每个对话提取出来。在

我想知道有没有更好的办法?在

非常感谢!在


Tags: textfromgtcomexampleemail邮件对话
1条回答
网友
1楼 · 发布于 2024-03-28 21:03:06

这里有一个非常简单的解决方案,itertools.groupby假设电子邮件正文不包含'>'

In [165]: for _, v in itertools.groupby(text.splitlines(), key=lambda x: x.count('>')):
     ...:     print('\n'.join(v))
     ...:     print('-' * 20)
     ...:     

groupby为您计算。你需要一些关于key=lambda x: len(re.match(r'\>+', x).group(0))的东西来获得更彻底的解决方案。在

输出:

^{pr2}$

相关问题 更多 >