我正试图从文本文件中解析一些电子邮件。基于https://gist.github.com/dideler/5219706,我有:
def getEmails(freeText):
r = re.compile(("([a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`"
"{|}~-]+)*(@|\sat\s)(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(\.|"
"\sdot\s))+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)"))
results = r.findall(freeText)
myset = set() # USING A SET AVOIDS DUPLICATES
for x in results:
if len(x)>2:
myset.add(str(x))
return myset
这工作得很好,但我得到一套返回,看起来像:
"('myname@abc.org', '@', '.')
我加了一句话:
if len(x)>2:
希望这将从返回的集合中消除单个字符的结果,但是正如您所看到的,它不起作用。为什么不呢?我怎样才能解决这个问题,只收到真正的电子邮件
如果仔细查看您发送的链接(第28行)中的程序,您可以看到它们只使用正则表达式结果元组的第一个元素
所以你可能想改变这一点:
分为:
…或者只是换个正则表达式
你不需要检查长度。在两个捕捉组之间转入非捕捉组,如下所示
DEMO
相关问题 更多 >
编程相关推荐