1

我想编写一个正则表达式来过滤掉通过 imaplib 和下面我的 Python 脚本中的电子邮件模块拉入的电子邮件中的所有垃圾。我认为正则表达式是最好的,但随时提出更好的解决方案。知道为什么电子邮件文本在下面的单词be=tter中有等号吗?原始电子邮件更好

Python 片段:

emailMessage = email.message_from_string
print emailMessage.get_payload():

打印文本:

>=20
> >>>>
> >>>> Hope this makes it through you spam filter but couldn't think of a be=
tter subject.
> >>>>
4

2 回答 2

4

正如 Karl Knechtel 在评论中所说,您的消息被编码为quoted-printable。要对其进行解码,请使用quopri.decodestring()

import quopri

decoded = quopri.decodestring(emailMessage.get_payload())

使用正则表达式去除“垃圾”字符效率低下,这也意味着每当您的输入中出现新字符时,您都必须修改您的代码。

但是,如果在解码后您想>在每行的开头丢失字符[以及它们之间的任何空格],那么对于那个,正则表达式是一个合理的解决方案:

import re

chevrons = re.compile("(?m)^[> ]*")
stripped = re.sub(chevrons, "", decoded)

(?m)顺便说一句,表示正则表达式是multiline

于 2012-11-15T01:05:24.930 回答
1

如果您的消息与下面的正则表达式匹配,则过滤掉:

         ^>=\d$

IE

  if not (re.match('^>=\d$', emailMessage)):
    print emailMessage.get_payload():
于 2012-11-15T00:28:00.763 回答