我试图从文本文件中解析某些电子邮件。基于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
这工作得很好,但我得到了一组返回,看起来像:
"('[email protected]', '@', '.')
我加了一行:
if len(x)>2:
希望这会消除返回集中的单个字符结果,但正如你可以看到它不起作用。为什么不?我该如何解决这个问题才能得到真正的电子邮件?
要命阿维纳什,这一工程!我没有经验过正则表达式,你会介意解释你做了什么吗?最好 - 比尔 – user61629 2014-10-31 02:54:55
're.findall'首先给予这些群体。如果没有找到捕获组,只有它会打印匹配。你原来的正则表达式包含三个捕获组。一个捕获整个电子邮件地址,另一个捕获点,然后另一个捕获'@'符号。所以你得到三个部分。我只是将捕获“@”的捕获组和“点”变成非捕获组。所以最后我们有一个捕获组。现在找到打印出现在该单个组中的内容。 – 2014-10-31 03:00:27
非常感谢 – user61629 2014-10-31 03:52:24