[Python专题学习]-Python正则表达式
一.正则表达式基本概念
1.为什么使用正则
疑问:字符串匹配就可以实现?

场景1:找到bijian开头的语句
#场景1:找到bijian开头的语句 def find_start_bijian(fname): f = open(fname) for line in f: if line.startswith('bijian'): print(line) find_start_bijian("bijian.txt")
场景2:找到bijian开头和结尾的语句
#场景2:找到bijian开头和结尾的语句 def find_in_bijian(fname): f = open(fname) for line in f: #if line.startswith('bijian') and line.endswith('bijian\n'): if line.startswith('bijian') and line[:-1].endswith('bijian'): print(line) find_in_bijian("bijian.txt")
场景3:匹配一个下划线和字母开头的变量名

详见《Python用pip安装IPython/Jupyter最佳交互环境》

双击运行jupyter-notebook.exe,自动打开如正页面。

选择Python3,进入如下页面。

匹配一个下划线和字母开头的变量名。

我们的疑问:每一次匹配都要单独一个函数去完成,我们能否把他做成一个规则?
2.正则表达式概念
使用单个字符串来描述匹配一系列符合某个句法规则的字符串
是对字符串操作的一种逻辑公式
应用场景:处理文本和数据
正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功,否则匹配失败。
二.python正则表达式re模块
1.import re:python正则表达工模块
2.第一个正则表达式

可以在命令行输入ipython,进入交互窗口。

正则匹配:

操作实例二:

直接match

三.正则表达式语法

1.匹配任意字符


2.匹配字符集

3.匹配多个字符

匹配大写字母开头,后面是小写字母,后面的小写字母可以出现一次或多次,即*号匹配实例。

4.+匹配实例
+:匹配一次或无限次

5.?匹配实例
匹配0-99的所有数字

6.{m}/{m,n}匹配实例
匹配邮箱

7.*?/+?/??实例

8.正则表达式边界匹配



9.匹配左右任意一个表达式


10.分组匹配

11.引用编号对应的分组匹配字符串

12.分组起一个别名

四.re模块相关方法使用
1.python正则表达式之re模块方法介绍
a.search(pattern,string,flags=0):在一个字符串中查找匹配

b.findall(pattern, string, flags=0):找到匹配,返回所有匹配部分的列表

c.sub(pattern, repl, string, count=0, flags=0):将字符串中匹配正则表达式的部分替换为其他值

d.split(pattern, string, maxsplit=0, flags=0):根据匹配分割字符串,返回分割字符串组成的列表

2.python正则表达式练习
抓取网页中的图片到本地
a.抓取网页
b.获取图片地址
c.抓取图片内容并保存到本地
我们这里爬取的是http://www.imooc.com/course/list页面的图片

import urllib.request import re from urllib import parse req = urllib.request.urlopen('http://www.imooc.com/course/list') buf = req.read() listurl = re.findall(r'src=.+\.jpg', buf.decode('utf-8')) i = 0 for url in listurl: f = open(str(i) + '.jpg', 'wb') reqUrl = re.sub(r'src="', 'https:', url) print(reqUrl) req = urllib.request.urlopen(reqUrl) buf = req.read() f.write(buf) f.close() i += 1
运行后,当前目录下将会产生30张图片,如下所示:

说明抓取网页图片成功。
posted on 2019-04-15 01:10 bijian1013 阅读(302) 评论(0) 收藏 举报
浙公网安备 33010602011771号