我想编写一个正则表达式来过滤掉我在下面的Python脚本中通过imaplib和电子邮件模块引入的电子邮件中的所有垃圾。我认为正则表达式是最好的,但可以随意提出更好的解决方案。知道为什么电子邮件文本在下面的单词 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.
> >>>>
答案 0 :(得分: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顺便说一句。
答案 1 :(得分:1)
如果您的邮件符合以下正则表达式,请过滤掉:
^>=\d$
即
if not (re.match('^>=\d$', emailMessage)):
print emailMessage.get_payload():