2013-03-04 79 views
5

Tôi khá mới với python và regex và tôi đã tự hỏi làm cách nào để trích xuất phần đầu tiên của địa chỉ email tối đa tên miền. Vì vậy, ví dụ nếu:python regex lấy phần đầu tiên của địa chỉ email

s='[email protected]' 

Tôi muốn kết quả regex để được (tính đến tất cả "các loại" của id email tức là bao gồm cả số vv ..):

xjhgjg876896 

tôi nhận được ý tưởng của regex - như trong tôi biết tôi cần phải quét cho đến khi "@" và sau đó lưu trữ kết quả - nhưng tôi không chắc chắn làm thế nào để thực hiện điều này trong python.

Cảm ơn thời gian của bạn.

+0

Bạn có _need_ sử dụng regex cho điều này (ví dụ: như một phần của bài tập về nhà hay gì đó)? Hay bạn chỉ đoán rằng không có cách nào khác để làm điều này? – abarnert

+0

Nếu bạn _do_ cần sử dụng regex, bạn sẽ phải đọc hướng dẫn về chúng, và trên mô-đun 're' của Python. Nếu tôi chỉ nói "Sử dụng' re.match ('^ (. *?) @', S) '", bạn sẽ không biết cách sử dụng thứ quay lại, cách gỡ lỗi hoặc mở rộng nó, v.v. vậy bạn là gì? – abarnert

+0

Bạn cũng có muốn phân tích cú pháp các địa chỉ email hợp lệ này không: 'Tony Snow <[email protected]>' và '(tony snow) tony @ example.com'? Bạn muốn trở về từ 'tony% example.com @ example.org' là gì? Tiêu chuẩn hiện tại cho định dạng địa chỉ email có tại đây: http://www.rfc-editor.org/rfc/rfc5322.txt –

Trả lời

28

Bạn chỉ nên sử dụng phương pháp split của chuỗi:

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

Thao tác này sẽ không hoạt động đối với các email như * John Smith <[email protected]> * –

+0

@MaksymPolshcha: OP không chỉ định rằng đó là đầu vào có thể. –

+0

Đó không phải là một regex, như OP hỏi. –

4

Như những người khác đã chỉ ra, các giải pháp tốt hơn là sử dụng split.

Nếu bạn thực sự quan tâm về việc sử dụng regex thì đây nên làm việc:

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" 

và nó in ra

foo 

LƯU Ý: Điều này sẽ chỉ làm việc với chuỗi email của [email protected]. Nếu bạn muốn khớp các email thuộc loại NAME<[email protected]>, bạn cần điều chỉnh regex.

+0

Nó hoạt động tuyệt vời .. cố định một số lỗi chính tả và những thứ nhỏ khác nhưng nó hoạt động tốt .. lấy "firstpart" và lấy "firstpart.withdot" trước dấu @. –

0

Vài tháng trước đã viết EmailExtractor.py. Bạn có thể muốn thử nó và sửa đổi nó cho nhu cầu của bạn. Nó trích xuất địa chỉ email. Bạn có thể tách đầu ra bằng '@' (được khuyến nghị) hoặc sửa đổi regex.

-1

Dưới đây sẽ giúp bạn làm điều đó:

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

câu trả lời tốt đã được trả lời, nhưng tôi muốn đưa tôi anyways.

  • Nếu tôi có email [email protected] tôi muốn chỉ nhận "john".

    tôi muốn có được chỉ "john"

  • Nếu tôi có một [email protected] email.com tôi muốn có được chỉ là "john"

    tôi muốn có được chỉ "john"

vì vậy đây là những gì tôi đã làm:

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

cổ vũ

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('[email protected]') 

Kết quả:

Username : foo.goo 
Domain : bar 
Type  : com 
Các vấn đề liên quan