【问题标题】:Regex to Filter out ">" and "=20" from email.message_from_string正则表达式从 email.message_from_string 中过滤掉“>”和“=20”
【发布时间】:2012-11-03 14:09:56
【问题描述】:

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

Python sn-p:

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.
> >>>>

【问题讨论】:

  • 你真的不想“过滤掉”=20。它是编码的一部分,称为“quoted-printable”。你想解码它。

标签: python regex encoding mime


【解决方案1】:

正如 Karl Knechtel 在 cmets 中所说,您的消息被编码为 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,顺便说一下。

【讨论】:

  • 感谢回复,quopri.decodestring 和 part.get_payload(decode=True) 有什么区别吗?
  • 从外观上看,不...我不知道存在该选项。每天学习一些东西等等。:-)
【解决方案2】:

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

         ^>=\d$

  if not (re.match('^>=\d$', emailMessage)):
    print emailMessage.get_payload():

【讨论】:

    猜你喜欢
    • 2010-12-18
    • 1970-01-01
    • 2022-10-04
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2011-03-07
    相关资源
    最近更新 更多