[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张图片,如下所示:

  说明抓取网页图片成功。

 

学习地址:https://www.imooc.com/video/10505

posted on 2019-04-15 01:10  bijian1013  阅读(302)  评论(0)    收藏  举报

导航