我試圖從文本文件中解析某些電子郵件。基於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