2013-03-04 82 views
5

我對Python和正則表達式相當陌生,我想知道如何提取電子郵件地址的第一部分直到域名。因此,例如,如果:python正則表達式獲取電子郵件地址的第一部分

s='[email protected]' 

我想正則表達式的結果進行(考慮到電子郵件ID的所有的「種種」,即包括數字等):

xjhgjg876896 

我的想法的正則表達式 - 因爲我知道我需要掃描直到「@」然後存儲結果 - 但我不確定如何在python中實現這一點。

謝謝你的時間。

+0

你是否需要使用正則表達式(例如,作爲家庭作業的一部分或什麼)?或者你只是猜測沒有其他方法可以做到這一點? – abarnert 2013-03-04 20:31:54

+0

如果您需要使用正則表達式,您將不得不閱讀關於它們的教程以及Python're'模塊。如果我只是說「使用're.match('^(。*?)@',s)'」,你不會知道如何使用返回的東西,如何調試或擴展它等,所以你是重點? – abarnert 2013-03-04 20:34:56

+0

你是否也想解析這些有效的電子郵件地址:'Tony Snow <[email protected]>'和'(tony snow)tony @ example.com'?你想從'tony%example.com @ example.org'返回什麼?當前的電子郵件地址格式標準位於:http://www.rfc-editor.org/rfc/rfc5322.txt – 2013-03-04 20:36:27

回答

28

你應該只使用字符串的方法split

s.split("@")[0] 
+2

這不適用於* John Smith <[email protected]> * – 2013-03-04 20:37:28

+0

@MaksymPolshcha這樣的電子郵件:OP沒有指定這是可能的輸入。 – 2013-03-04 20:46:29

+0

這不是一個正則表達式,就像OP問的那樣。 – 2013-03-04 20:48:01

4

正如其他人所指出的,更好的解決方案是使用split

如果你使用regex真正熱衷那麼這應該工作:

import re 

regexStr = r'^([^@]+)@[^@]+$' 
emailStr = '[email protected]' 
matchobj = re.search(regexStr, emailStr) 
if not matchobj is None: 
    print matchobj.group(1) 
else: 
    print "Did not match" 

,並打印出

foo 

注:這將只與電子郵件字符串工作[email protected]。如果您想匹配類型NAME<[email protected]>的電子郵件,則需要調整正則表達式。

+0

它很好用..修正了一些錯別字和其他小事情,但它的效果很好..採用「第一部分」並在@符號前加上「firstpart.withdot」.. – 2016-05-22 22:50:53

0

幾個月後回寫EmailExtractor.py。您可能喜歡嘗試並根據需要對其進行修改。它提取電子郵件地址。你可以用'@'分隔輸出(推薦)或修改正則表達式。

-1

下面應該可以幫助你做到這一點:

fromAddr = message.get('From').split('@')[1].rstrip('>') 
     fromAddr = fromAddr.split(' ')[0] 
0

很好的答案已經回答了,但我想放曠反正。

  • 如果我有一個電子郵件[email protected]我想只是「約翰」。

    我想只有 「約翰」

  • 如果我有一個電子郵件[email protected]。COM我想只是 「約翰」

    我只想得到 「約翰」

所以這是我做過什麼:

name = recipient.split("@")[0] 
name = name.split(".")[0] 
print name 

歡呼

0
#!/usr/bin/python3.6 


def email_splitter(email): 
    username = email.split('@')[0] 
    domain = email.split('@')[1] 
    domain_name = domain.split('.')[0] 
    domain_type = domain.split('.')[1] 

    print('Username : ', username) 
    print('Domain : ', domain_name) 
    print('Type  : ', domain_type) 


email_splitter('foo.g[email protected]') 

輸出:

Username : foo.goo 
Domain : bar 
Type  : com 
相關問題