【问题标题】:Email harvest with python使用 python 收集电子邮件
【发布时间】:2013-02-21 14:43:24
【问题描述】:

我开发并应用程序从文件中收集任何类型的电子邮件 类型:ishani@dolly.lk ishani(at)dit.dolly.lk cs dot dolly dot edu的ishani

但问题是输出显示了列表中的一些额外项目,而不是提取的完整电子邮件。我无法弄清楚为什么会这样。我尝试了各种方式。我认为我的正则表达式或逻辑有问题

这是我的代码

data=f.read()

    regexp_email = r'(([\w]+)@([\w]+)([.])([\w]+[\w.]+))|(([\w]+)(\(at\))([\w]+)([.])([\w]+[\w.]+))|(([\w]+)(\sat\s)([\w-]+)(\sdot\s)([\w]+(\sdot\s[\w]+)))'
    pattern = re.compile(regexp_email)
    emailAddresses = re.findall(pattern, data)

    print emailAddresses

输出是这样的

[('ishani@sliit.lk', 'ishani', 'sliit', '.', 'lk', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('', '', '', '', '', 'ishani(at)dit.sliit.lk', 'ishani', '(at)', 'dit', '.', 'sliit.lk', '', '', '', '', '', '', ''), ('', '', '', '', '', '', '', '', '', '', '', 'ishani at cs dot dolly dot edu', 'ishani', ' at ', 'cs', ' dot ', 'dolly dot edu', ' dot edu')]

但我期待这样的输出

['ishani@dolly.lk','ishani(at)dit.dolly.lk','ishani at cs dot dolly dot edu']

是否有人尝试过任何支持我的问题的方法?

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    将您的 regexp_email 更改为:

    r'[\w]+@[\w]+[.][\w]+[\w.]+|[\w]+\(at\)[\w]+[.][\w]+[\w.]+|[\w]+\sat\s[\w-]+\sdot\s[\w]+\sdot\s[\w]+'
    

    您似乎不需要捕获组,因此我已将它们全部删除。

    如果您只需要指定\w,您也不需要\w 周围的[]

    r'\w+@\w+[.]\w+[\w.]+|\w+\(at\)\w+[.]\w+[\w.]+|\w+\sat\s[\w-]+\sdot\s\w+\sdot\s\w+'
    

    【讨论】:

    • 在您的解决方案中,它逐个字符地拆分。但我希望将整个电子邮件地址放在列表的一个元素中,例如 ['ishani@dolly.lk','ishani(at)dit.dolly.lk','ishani at cs dot dolly dot edu']
    • @Ishani702:它可以满足您的需求。你在说什么?
    • 你的结果显示如下 ['n', 'u', 'w', 'a', 'n', '@', 's', 'l', 'i', 'i'、't'、'.'、'l'、'k'、'n'、'u'、'w'、'a'、'n'、'('、'a'、't ', ')', 'd', 'i', 't', '.', 's', 'l', 'i', 'i', 't', '.', 'l', 'k'、'n'、'u'、'w'、'a'、'n'、''、'a'、't'、''、'c'、's'、''、' d'、'o'、't'、''、's'、'l'、'i'、'i'、't'、''、'd'、'o'、't'、' ', 'e', 'd', 'u'] 我期待的是这样 ['ishani@dolly.lk','ishani(at)dit.dolly.lk','ishani at cs dot dolly dot edu' ]
    • @Ishani702:可能是其他原因造成的。它在 ideone (Python 2.7.3) 上运行良好:ideone.com/zzbLPr
    【解决方案2】:

    你可以跳过空格

    print [e for ea in emailAddresses for e in ea if e]
    

    产生

    ['ishani@sliit.lk', 'ishani', 'sliit', '.', 'lk', 'ishani(at)dit.sliit.lk', 'ishani', '(at)', 'dit', '.', 'sliit.lk', 'ishani at cs dot dolly dot edu', 'ishani', ' at ', 'cs', ' dot ', 'dolly dot edu', ' dot edu']
    

    这不是完全你要求的......

    【讨论】:

    • 除了我的方法之外,还有其他方法可以提取此类电子邮件吗...?
    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2019-01-09
    • 2016-08-03
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多