正则表达式与re模块

news/2024/5/20 10:03:31 标签: 正则表达式, 学习, 开发语言, 交友, python

目录

正则表达式

简介

语法:

常用元字符:

量词:

贪婪匹配和惰性匹配:

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)


http://www.niftyadmin.cn/n/5435128.html

相关文章

每日五道java面试题之mybatis篇(四)

目录&#xff1a; 第一题. 映射器#{}和${}的区别第二题. 模糊查询like语句该怎么写?第三题. 在mapper中如何传递多个参数?第四题. Mybatis如何执行批量操作第五题 MyBatis框架适用场景 第一题. 映射器#{}和${}的区别 #{}是占位符&#xff0c;预编译处理&#xff1b;${}是拼接…

[氮化镓]GaN中质子反冲离子的LET和射程特性

这篇文件是一篇关于氮化镓&#xff08;GaN&#xff09;中质子反冲离子的线性能量转移&#xff08;LET&#xff09;和射程特性的研究论文&#xff0c;发表在《IEEE Transactions on Nuclear Science》2021年5月的期刊上。论文的主要内容包括&#xff1a; 研究背景&#xff1a;氮…

深度学习——自动微分

1、自动微分 求导是几乎所有深度学习优化算法的关键步骤。虽然求导的计算很简单&#xff0c;只需要一些基本的微积分。但对于复杂的模型&#xff0c;手工进行更新是一件很痛苦的事情&#xff08;而且经常容易出错&#xff09;。 深度学习框架通过自动计算导数&#xff0c;即自…

什么是制作视频内容?如何搞好视频内容制作?

写在前面 视频内容已成为希望吸引数字观众的企业、品牌和创作者的必备资产。事实上&#xff0c;根据NogenTech的一份报告&#xff0c;在2023年&#xff0c;91%的营销部门使用了这种动态内容。 视频内容创作和优化性能的技巧和窍门的增加绝非巧合。TikTok以及Instagram Reels和…

NPM 仓库的超集 JSR 来了!

引言 今天在 Deno 博客中看到了一篇文章&#xff0c;介绍了一个叫 JSR 的包管理注册中心&#xff0c;简单尝试了一下觉得还不错&#xff0c;本文将结合原文章和个人体验对 JSR 进行一个详细的介绍。 在现如今的前端开发中&#xff0c;包管理注册中心 (如 npmjs.com) 扮演着至…

算法笔记p142快速排序

目录 快速排序划分快排 随机划分的快速排序 快速排序 快速排序是排序算法中平均时间复杂度为O(nlogn)的一种算法。 划分 快排的实现需要解决划分的问题&#xff1a;对于一个序列A[1]、A[2]、……、A[n]&#xff0c;从中选取一个枢轴&#xff08;或主元&#xff09;&#xff…

【LabVIEW FPGA入门】浮点数类型支持

如今&#xff0c;使用浮点运算来设计嵌入式系统的需求变得越来越普遍。随着 FPGA 因其固有的大规模并行性而在浮点性能方面继续超越微处理器&#xff0c;这种情况正在加剧。线性代数和数字信号处理 (DSP) 等高级算法可以受益于浮点数据类型的高动态范围精度。LabVIEW FPGA 通过…

【S5PV210_视频编解码项目】裸机开发2:实现PWM波形驱动蜂鸣器

开发内容介绍 基于芯片自带的PWM定时器模块&#xff0c;实现对PWM波形的控制&#xff0c;掌握pwm定时器的驱动程序开发。 开发理论架构 1&#xff09;pwm波形的产生的条件&#xff1a;在指定的IO口输出一定频率和占空比的波形 2&#xff09;pwm波形频率的影响因素&#xff1…