我开发并申请从文件中收集任何类型的电子邮件 类型: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']
有没有人试过哪种方法支持我的问题?
答案 0 :(得分: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+'
答案 1 :(得分:-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']
这不是完全你要求的......