2012-03-14 59 views
0

我有這樣的正則表達式,用於提取郵件的正常工作:排除特定的電子郵件地址與正則表達式

([a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]) 

但也有一些電子郵件,我不希望包括像:

[email protected] 
[email protected] 
[email protected] 

我一直在嘗試添加諸如^(?! server | noreplay | name)之類的東西,但並非無效。

另外通過使用括號如上所述將會有(姓名,域名)元組?

+5

只需檢查正則表達式之前/之後檢查禁止的地址。正則表達式不需要這個。 – Czechnology 2012-03-14 18:13:26

+1

Second @Czechnology ...我認爲你不應該試圖強制這樣的東西進入你當前的正則表達式 - 這將是更好的第二個,單獨的正則表達式測試這些電子郵件 – Eric 2012-03-14 18:16:09

+0

順便說一句,你的原始正則表達式無法識別許多有效的電郵地址。例如,任何包含評論段的電子郵件或任何帶有'+'字符的用戶名都不匹配,儘管它們是有效的[RFC](http://tools.ietf.org/html/rfc2822)地址請參閱[我知道如何驗證電子郵件地址,直到我閱讀RFC](http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i .aspx) – dbenhur 2012-03-14 18:48:48

回答

0

檢查您的正則表達式的結果是否與任何與錯誤電子郵件列表相匹配的電子郵件。

results = list_from_your_regex 
invalids = ['info', 'server', 'noreply', ...] 
valid_emails = [good for good in results if good.split('@')[0] not in invalids] 
1

只是檢查這些電子郵件地址,你解壓後他們...

bad_addresses=['[email protected]', '[email protected]', '[email protected]'] 
emails=re.findall('[a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]', contentwithemails) 

for item in emails[:]: 
    if item in bad_addresses: 
    emails.remove(item) 

你要做的電子郵件(emails[:])的一個切片,因爲你不能,保持一個列表上循環做改變大小。這創建了一個「鬼」列表,可以在真實列表執行時讀取。

相關問題