正则表达式与re模块

目录

正则表达式

简介

语法:

常用元字符:

量词:

贪婪匹配和惰性匹配:

re模块

简介:

常用的几个模块:

1.findall

2.search

3.finditer

4.compile

案例展示:

需求:

思路分析:

1.获取页面源代码:

2.正则书写

3.开始匹配


正则表达式

简介

复制代码
Regular Expression, 正则表达式, ⼀种使⽤表达式的⽅式对字符串进⾏匹配的语法规则
正则的语法: 使⽤元字符进⾏排列组合⽤来匹配字符串 

在线测试正则表达式:https://tool.oschina.net/regex/

语法:

常用元字符:

(具有固定含义的特殊符号)

复制代码
 . 匹配除换⾏符以外的任意字符
\w 匹配字⺟或数字或下划线
\s 匹配任意的空⽩符
\d 匹配数字
\n 匹配⼀个换⾏符
\t 匹配⼀个制表符
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W 匹配⾮字⺟或数字或下划线
\D 匹配⾮数字
\S 匹配⾮空⽩符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示⼀个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符的所有字符

例子:

量词:

(控制前⾯的元字符出现的次数)

复制代码
* 重复零次或更多次
+ 重复⼀次或更多次
? 重复零次或⼀次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

例子:

贪婪匹配和惰性匹配

复制代码
.* 贪婪匹配:寻找匹配的最远的区间
.*? 惰性匹配:寻找匹配的最近的区间

例子:

re模块

简介:

re 是 Python 内置的正则表达式模块,提供了丰富的功能,用于处理字符串的模式匹配。它允许您使用正则表达式来搜索、匹配、替换和操作字符串。

re模块函数语法:

常用的几个模块:

1.findall

函数介绍:

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。注意*:** match 和 search 是匹配一次 findall 匹配所有。*

代码演示:

python 复制代码
import  re
#引用re模块
lst = re.findall(r"\d+","一天应该要吃3顿饭,现在已经吃了2顿了,还有一顿晚饭")
print(lst)

结果:

2.search

函数介绍:

re.search 扫描整个字符串并返回第一个成功的匹配,如果没有匹配,就返回一个 None。

re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配

代码演示:

python 复制代码
import  re
#引用re模块
lst = re.search(r"\d+","一天应该要吃3顿饭,现在已经吃了2顿了,还有一顿晚饭").group()
print(lst)

结果:

3.finditer

函数介绍:

与findall差不多. 只不过这时返回的是迭代器

代码演示:

python 复制代码
import  re
#引用re模块
lst = re.finditer(r"\d+","一天应该要吃3顿饭,现在已经吃了2顿了,还有一顿晚饭")
for i in lst:
    print(i.group()) #分组

结果:

4.compile

函数介绍:

将⼀个⻓⻓的正则进⾏预加载. ⽅便后⾯的使⽤

代码演示:

python 复制代码
import  re
obj = re.compile(r"\d+")
rsd = obj.search("一天应该要吃3顿饭,现在已经吃了2顿了,还有一顿晚饭")
print(rsd.group())

结果:

案例展示:

爬取豆瓣电影排行Top250信息

需求:

目标:获取电影名称、电影导演、电影上映日期、电影评分、评分人数

页面源代码内有想爬取的信息,可直接进行爬虫

思路分析:

1.获取页面源代码:

python 复制代码
import  re
import requests
url = "https://movie.douban.com/top250"
head ={
    "User-Agent":"Mozilla/5.0 (Linux; Android "
                 "6.0; Nexus 5 Build/MRA58N) AppleWeb"
                 "Kit/537.36 (KHTML, like Gecko) Chro"
                 "me/122.0.0.0 Mobile Safari/537.36"
                 " Edg/122.0.0.0"
}
rsp = requests.get(url,headers=head)
print(rsp.text)

2.正则书写

python 复制代码
obj = re.compile(r'<li>.*?<div class="item">'
                 r'.*?<div class="pic">.*?<em class'
                 r'="">(?P<num>\d+)</em>.*?<span cl'
                 r'ass="title">(?P<name>.*?)</span>'
                 r'.*?<p class="">.*?<br>\n(?P<year>'
                 r'.*?)&nbsp;.*?property="v:average"'
                 r'>(?P<average>.*?)</span>.*?<span>'
                 r'(?P<people>\d+)⼈评价</span>', re.S)

3.开始匹配

python 复制代码
rst = obj.findall(rsp.text)
for item in rst:
    dic = item.groupdict()
    dic['year'] = dic['year'].strip()
with open("mydouban.html",mode = 'w',encoding = 'utf-8')as f:
    f.write(rsp.text)
相关推荐
databook5 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar6 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780516 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_6 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机13 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机14 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机14 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机14 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i14 小时前
drf初步梳理
python·django
每日AI新事件14 小时前
python的异步函数
python