python找出一串字符中所有的email


#coding=utf-8
import re
email_re = re.compile(
r"(([-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
r')@(?:[A-Z0-9]+(?:-*[A-Z0-9]+)*\.)+[A-Z]{2,6})', re.IGNORECASE) # domain

email_str = u"aabbcc@163.com  QQ:87590067 MSN:ddeedd@hotmail.com"

email_list = []

for one in email_re.findall(email_str):
email_list.append(one[0])

print email_list


结果:[u'aabbcc@163.com', u'ddeedd@hotmail.com']

其中email_re为django源码中匹配email地址的正则表达式

注:
区分group,groups,findall:

group()即默认情况, 是返回的整个表达式所匹配的,group(1)是返回子组1(其实就是第一个括号里的表达式)所匹配的,类似的group(2)是子组2匹配的,为了方面记忆,可以用命名组 (?P<name>...) 匹配时用group(name)即可

而groups()返回的是一个元组,包括所有子组所匹配的 如 (子组1,子组2,...)

而findall()返回的是一个列表,他的第一个元素其实就是groups()返回的元组

一个简单的例子:


>>> re.search('(a(\d))','a342a1').group(0,1,2)
('a3', 'a3', '3')
>>> re.search('(a(\d))','a342a1').groups()
('a3', '3')
>>> re.findall('(a(\d))','a342a1')
[('a3', '3'), ('a1', '1')]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值