-4

我开发并申请从文件类型中收获任何类型的电子邮件:ishani@dolly.lk ishani(at)dit.dolly.lk ishani at cs dot dolly dot edu

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

这是我的代码

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']

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

4

2 回答 2

0

将您更改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+'
于 2013-03-06T17:14:31.443 回答
-1

你可以跳过空白

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']

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

于 2013-03-06T17:14:06.410 回答