1、import re # 导入python正则表达式模块
2、正则匹配两种方式:
p = re.compile(r'imooc') # 生成Pattern对象 res = p.match('imooc python') # 调用 patern 对象的 match 方法匹配字符串,结果返回一个 match 对象或 None print (res.group()) # group() 从对象获取匹配的值 imooc print (res.span()) # span() 从对象获取匹配的起始位置 (0, 5)
res = re.match(pattern, str ) # 在字符串中从头开始匹配,结果返回一个 match 对象或 None res = re.search(pattern, str) # 在字符串中匹配第一个子串,结果返回一个 search 对象或 None res = re.findall(pattern, str) # 查找所有子串,结果返回一个List,所有匹配到的子串 re.sub(pattern, repl, str, count = 0) # 匹配替换,repl替换字符串,可以是一个函数对象,count匹配次数 re.split(pattern, str, maxsplit = 0) # 根据匹配分割字符串,返回一个List
3、正则表到式语法:
. #匹配任意字符
[abc] #匹配任意字符集abc中的任一个字符
\d #匹配数字 \D #匹配非数字
\s #匹配空白字符 \S #匹配非空白字符
\w #匹配字符[a-zA-Z0-9] \W #匹配非[a-zA-Z0-9]字符
* #匹配0或多次
+ #匹配1或多次
? #匹配最多一次
{m} #匹配m次 {m, n} #匹配m到n次
*? #非贪婪模式,尽可能少匹配字符,出现了也不匹配
+? #非贪婪模式,尽可能少匹配字符,只匹配一次,再出现就不匹配了
?? #非贪婪模式,尽可能少匹配字符,最多一次,最少不匹配
^ #匹配开头^.
$ #匹配结尾.$
\A #指定以以某字符串开头\A... \Z #指定以某字符串结尾\Z...
| #匹配左右任意一个表达式
(a|b) #括号中的表达式作为分组
4、正则表达式练习:(简单爬虫,爬取慕课网网站图片并保存在本地,Python版本3.0以下)
# 1.抓取网页
# 2.获取图片地址
# 3.抓取图片内容并保存到本地
# -*- coding:utf-8 -*- import urllib2 import re #请求网页并读取 res = urllib2.urlopen('http://www.imooc.com/course/list').read() #筛选出图片地址,使用正则表达式匹配符合条件的网址 url_list = re.findall(r'//.+?\.jpg', res) url_map = map(lambda x: 'http:'+x, url_list[::2]) url_set = set(url_map) #获取图片写入到jpg文件 i = 0 for url in url_map: f = open('imooc_img/'+str(i)+'.jpg', 'w') res = urllib2.urlopen(url).read() f.write(res) i += 1