首页 > 解决方案 > 从电子邮件下载的 Reg Ex URL 不适用于某些 url

问题描述

我想要做的是使用 python 使用 pop3 协议下载电子邮件,在 whgole 上它工作正常,我能够解析电子邮件中的所有 url,除了 1 类型:

def pop3_downloader(username, password, pop3server, port, use_ssl):
    try:
        server = ''
        if use_ssl == "no":
            server = poplib.POP3(pop3server, port)
        elif use_ssl == "yes":
            server = poplib.POP3_SSL(pop3server, port)
        else:
            pass

        server.user(username)
        server.pass_(password)
        numMessages = len(server.list()[1])

        print("--> # Of Messages: " + str(numMessages))

        email_container = []
        for i in range(numMessages) :
            (server_msg, body, octets) = server.retr(i+1)
            for j in body:
                try:
                    msg = email.message_from_string(j.decode("utf-8"))
                    email_body = msg.get_payload()
                    email_extract_urls = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', email_body)
                    if len(email_extract_urls) > 0:
                        #activation_links = "/activate/|registration.activate&token="
                        #if any(s in email_extract_urls for s in activation_links.split('|')):
                        email_container.append(email_extract_urls)
                except:
                    pass
            #server.dele(i+1)
        server.quit()
        return email_container

    except Exception as e: 
        print_exception()

以上是我当前的代码,未提取的电子邮件 url 类型是:

http://thesite.com/index.php?option=com_users&task=registration.activate&token=xxxxxxxxxxxxxxxxxxxxxx

我的正则表达式只是忽略了这个结构,但提取了所有其他类型,我在这里做错了吗?我已经测试了一些我在各个网站上找到的,但它们似乎都失败了。

任何帮助表示赞赏。

标签: pythonregexpython-3.x

解决方案


推荐阅读