Python 正则匹配(re)组的应用
昨天刚看完re的一小部分,今天刚好有个任务需要用到正则。
需求是:一张表的text字段存了很多内容。里面包括发给用户的邮件内容,已经用户的邮箱等等。现在需要查找出发送给哪些email以及多少封邮件。需要匹配的
是 <a href="mailto:AAA@DDD.com">AAA@DDD.com</a>',把 “AAA@DDD.com”取出来。
用下面的脚本:
#!/bin/env python # -*- encoding: utf-8 -*- #------------------------------------------------------------------------------- # Name: find_email.py # Purpose: 从文本中正则匹配数据 # Author: zhoujy # Created: 2012-10-29 # update: 2012-10-29 #------------------------------------------------------------------------------- import re import fileinput import MySQLdb conn = MySQLdb.connect(host='192.168.1.20',user='zjy',passwd='123456',db='emd',port=3308) query = '''select content from message e JOIN mesInfo m ON e.id=m.id WHERE m.infoType=1 and date_format(e.sendTime, "%y-%m")="12-09"''' cursor= conn.cursor() cursor.execute(query) item = cursor.fetchall() pat = re.compile(r'<a href="mailto:(.*)"') Finddict = {} #for line in fileinput.input(): for line in item: line=str(line) m = pat.search(line) if m: # print m.group(1) Finddict[m.group(1)] = Finddict.get(m.group(1),0)+1 List = sorted(Finddict.items(),key=lambda i: -i[1]) for kv in List: print kv[0] + ' : ' + str(kv[1])
结果:
123456@qq.com : 11
123456@126.com : 10
123456@139.com : 10
123456@yeah.net : 9
123456@cmc.edu.cn : 7
123456@sina.com : 7
123456@fudan.edu.cn : 6
.....
另一个应用:
用正则表达式将网页代码中所有<img src="XXX"> 形式中的XXX的字符串提取出
#!/usr/bin/env python #-*-encoding:utf8-*- #用正则表达式将所有<img src="XXX"> 形式中的XXX的字符串提取出 import sys import urllib2 import re def get_html(url): data = urllib2.urlopen(url).read() pat = re.compile(r'<img src="(\S*)"') #正常情况只需要写成:r'<img src="(.*)"' ,但有些后面会带有一些长宽等属性,所以需要去除空白字符 imgs = pat.findall(data) for i in imgs: print i if __name__ == '__main__': url = sys.argv[1] get_html(url)
效果:
zhoujy@m2:~$ python get_url.py http://www.baidu.com http://www.baidu.com/img/bdlogo.gif http://www.baidu.com/cache/global/img/gs.gif
知识点:
re模块,匹配对象和组。--- < Python 基础教程(第2版) P191~P200 >
~~~~~~~~~~~~~~~
万物之中,希望至美
~~~~~~~~~~~~~~~