【问题标题】:Applying Regular Expression To An Instance - From Email将正则表达式应用于实例 - 从电子邮件
【发布时间】:2012-03-03 18:07:06
【问题描述】:

我正在使用 imaplib 模块登录我的 gmail 帐户并检索电子邮件。 这给了我很多信息以及 to/from/subject/body 文本。根据 type(msg) 返回的第一个对象是一个实例。

当我将它应用于 msg 对象时,我的正则表达式将不起作用,因为它需要一个字符串,这显然是一个实例,因此不起作用。

当我给它一个字符串时识别日期的正则表达式示例:

    match = re.search(r"Time:\s(([0-2]\d):([0-5]\d))", text) # validates hour and minute in a 24 hour clock

真的是三个问题:
1.) 我是否以正确的方式进行此操作,还是有更好的方法?
2.) 如何将我的正则表达式应用于此“实例”信息,以便识别日期/时间等
3.) 我怎样才能检索电子邮件正文?

result, data = mail.fetch(latest_email_id, "(RFC822)")

raw_email = data[0][1]

email_message = email.message_from_string(raw_email)

msg = email.message_from_string(raw_email)
msg.get_payload()

再次感谢您

【问题讨论】:

  • 我没有使用过 imaplib,但是 msg 实例可以使用 str(msg) 转换为字符串,或者它具有返回 msg 的属性
  • 我是 python 新手,但是当我执行 type(msg) 时它返回 ?那不是类型吗?

标签: python regex email


【解决方案1】:

我认为这个问题可能与我回答的另一个问题非常接近: payload of an email in string format, python

另一个人的主要问题是 get_payload() 可以返回您必须检查的多部分对象。它并不总是一个字符串。

这是另一个问题中关于如何处理从 get_payload() 获得的对象的 sn-p:

if isinstance(payload, list):
    for m in payload:
        print str(m).split()

else:
    print str(m).split()

此外,您可以在此处查看我与该问题的 OP 进行的实际扩展对话:https://chat.stackoverflow.com/rooms/5963/discussion-between-jdi-and-puneet

【讨论】:

  • 我认为你可能是对的,但我真的不明白如何解决这个问题。那么如果 msg 是一个多部分对象,我该如何访问 body/from/subject 等?
【解决方案2】:

原来可以通过 payload[0] 访问电子邮件的正文,因为 payload 是一个列表,而 msg 变量是一个实例。然后我将它转换为一个简单的字符串

payload = msg.get_payload()
body = payload[0]
str_body = str(body)

再次感谢您的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 2011-12-28
    • 2012-01-02
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多