【发布时间】:2012-01-09 05:12:38
【问题描述】:
我想提取在电子邮件正文中找到的第一个数字。在电子邮件库的帮助下,我只将邮件正文提取到了一个字符串中。但问题是,在真正的纯文本正文开始之前,有一些关于编码等的信息(那些包含数字)。我怎样才能以一种可靠的方式跳过那些不依赖于创建电子邮件的客户端并且只获取第一个数字的方法。
如果我这样做
match = re.search('\d+', string, re.MULTILINE)
它将在有关编码或其他内容的信息中获得第一个匹配项,而不是在实际邮件内容中。
好的。我添加了一个示例。这就是它的外观(我将提取 123)。但我想它看起来可能与其他客户发送的不同。
--14dae93404410f62f404b2e65e10 内容类型:文本/纯文本;字符集=ISO-8859-1 垃圾 123 垃圾 --14dae93404410f62f404b2e65e10 内容类型:文本/html;字符集=ISO-8859-1垃圾 123 垃圾
--14dae93404410f62f404b2e65e10--更新: 现在我被迭代器困住了:-/我真的试过了。但我不明白。这段代码:
msg = email.message_from_string(raw_message)
for part in email.iterators.typed_subpart_iterator(msg, 'text', 'plain'):
print part
输出:
--14dae93404410f62f404b2e65e10
Content-Type: text/plain; charset=ISO-8859-1
Junk 123 Junk
--14dae93404410f62f404b2e65e10
Content-Type: text/html; charset=ISO-8859-1
<p>Junk 123 Junk</p>
--14dae93404410f62f404b2e65e10--
为什么不直接输出:
Junk 123 Junk
?
【问题讨论】:
-
显然您需要向我们提供一些我们可以使用的样本。
-
你的权利,这是它看起来的一种方式......
-
使用 body_line_iterator 跳过子部分标题。我将在我的答案中添加一个具体示例。