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