正则表达式与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 匹配所有。

代码演示:

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匹配整个字符串,直到找到一个匹配

代码演示:

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

结果:

3.finditer

函数介绍:

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

代码演示:

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

结果:

4.compile

函数介绍:

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

代码演示:

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

结果:

案例展示:

爬取豆瓣电影排行Top250信息

需求:

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

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

思路分析:

1.获取页面源代码:

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.正则书写

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.开始匹配

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.mzph.cn/news/752590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

code摘录日记[矩阵变元素,变列向量,3D表面图,table行列设置] Matlab

矩阵变元素&#xff0c;变列向量 W1(Z1 < Z2) nan; % Z1,Z2 all matrix,Only plot points where Z1 > Z2;Z1 < Z2位置值填为NaNx x(:); % Now x is a 30-by-1 vector; matrix变列vector技巧3D表面图 hand figure; % Handle to the figure, for more plotting later…

【QED】血压高的天依

文章目录 题目测试样例 思路代码 题目 题目链接&#x1f517; 天依最近迷上了《Battlefield1》&#xff0c;游戏中每种武器都有不同的攻击伤害值。天依跟敌人对枪&#xff0c;经常在被敌人击杀后发现自己击杀了敌人99滴血&#xff0c;因此血压常常升高。为了降低天依的血压&am…

后台管理系统和前台页面的关联

一、项目bug 1、多人开发的项目冲突 2、相关框架的的运用 3、后台数据的处理 4、antd框架日期框的回显 5、上传图片的回显 6、请求的端口号不一致&#xff0c;需要做前端反向代理 二、项目用到的技术栈 reactts来进行开发后台后台用到的工具则是vite这一去轻量化工具去…

彻底学会系列:一、机器学习之梯度下降(1)

1 梯度下降概念 1.1 概念 梯度下降是一种优化算法&#xff0c;用于最小化一个函数的值&#xff0c;特别是用于训练机器学习模型中的参数&#xff0c;其基本思想是通过不断迭代调整参数的值&#xff0c;使得函数值沿着梯度的反方向逐渐减小&#xff0c;直至达到局部或全局最小…

如何使用SFC和DISM命令修复损坏的Windows系统文件?这有详细步骤

前言 Windows内置的系统文件检查器工具可以扫描Windows系统文件是否损坏或任何其他更改。如果文件已被修改,它将自动用正确的版本替换该文件。以下是如何使用它。 何时应该运行SFC或DISM 如果Windows出现蓝屏或其他崩溃,应用程序出现故障,或者某些Windows功能无法正常工作…

HBase常用命令

简介&#xff1a; HBase Shell 是一种操作HBase的交互模式&#xff0c;支持完整的HBase命令集。 hbase shell # 打开Hbase Shell目录: 命令类别常用命令Generalversion&#xff0c;status&#xff0c;whoami&#xff0c;helpDDLalter&#xff0c;creater&#xff0c;descri…

python网络编程:通过socket实现TCP客户端和服务端

目录 写在开头 socket服务端&#xff08;基础&#xff09; socket客户端&#xff08;基础&#xff09; 服务端实现&#xff08;可连接多个客户端&#xff09; 客户端实现 数据收发效果 写在开头 近期可能会用python实现一些网络安全工具&#xff0c;涉及到许多关于网络…

供电系统分类详解

一、供电系统分类 电力供电系统一般有5种供电模式&#xff0c;常用的有&#xff1a;IT系统&#xff0c;TT系统&#xff0c;TN系统&#xff0c;其中TN系统又可以分为TN-C&#xff0c;TN-S&#xff0c;TN-C-S。 1、TN-C系统&#xff08;三相四线制&#xff09; 优点: 该系统中…

【无标题】自用款。。。

#include #include // #include <string.h> // 定义结构体 struct Student { char name[30]; int age; float score; }; // 定义比较函数&#xff0c;用于std::sort对结构体数组进行排序 bool compareStudentsByScore(const Student& a, const Student& b) {…

Hadoop大数据应用:NFS网关 连接 HDFS集群

目录 一、实验 1.环境 2.NFS网关 连接 HDFS集群 3. NFS客户端挂载HDFS文件系统 二、问题 1.关闭服务报错 2.rsync 同步报错 3. mount挂载有哪些参数 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xff08;…

JavaAPI(含面试大厂题含源码)

在Java编程中&#xff0c;API&#xff08;应用程序编程接口&#xff09;是一套常用于执行特定任务或与系统交互的预定义函数和协议集合。Java标准库&#xff08;也称为Java API&#xff09;提供了广泛的功能&#xff0c;包括集合操作、文件处理、网络编程等&#xff0c;这些都是…

计算机网络的功能和特点

<计算机网络的功能> 1、数据通信 这是最基本的功能。用来传送各种类型的信息&#xff0c;包括文字信件、新闻消息、资讯信息、图片资料、声音、视频流等各种多媒体信息。 2、资源共享 资源是指网络中所有的软件、硬件和数据&#xff0c;共享则是指网络中的用户能够部…

高级Redis应用进阶 一站式Redis解决方案

源代码在https://github.com/629y/food-social-contact-parent Redis-1 Redis Redis-2 Redis基础数据类型与基本使用 Redis-3 Redis高阶类型与高级应用 Redis-4 Redis数据持久化 Redis-5 主从复制和读写分离 Redis-6 哨兵监控 Redis-7 集群搭建 Redis-8 集群高可用

【Mysql基础】查询01-去重、连接字符、模糊查询、通配符、检索表的结构信息

这里写目录标题 1 去重 distinct2 连接字符 concat(str1,str2,...)3 模糊查询3.1 like 包含3.2 通配符3.3 between and3.4 in3.5 is null 4 安全等于 <>5 检索表的结构信息 desc6 课后练习 1 去重 distinct 使用 DISTINCT 关键字&#xff0c;可以从结果集中去除重复的行…

他山之石可以攻玉

《赫畅&#xff5c;我42岁&#xff0c;从25亿到退网5年后的再次归来》 虽然行业不同&#xff0c;但是很多基本原理都是相通的。 1、不能什么都自己干。平台这么大&#xff0c;应用这么多&#xff0c;自己干不可能&#xff0c;多半也干不好。要尽可能多的形成统一战线&#xf…

Mac屏幕录制编辑软件

以下是一些Mac平台上受到推荐和好评的屏幕录制编辑软件&#xff1a; OBS Studio&#xff08;免费且开源&#xff09;&#xff1a; OBS 是一款功能强大的免费屏幕录制工具&#xff0c;不仅限于游戏直播&#xff0c;也适用于各种屏幕录制需求。它允许用户捕获屏幕、摄像头、音频&…

蓝桥杯day3刷题日记--P9240 冶炼金属

P9240 [蓝桥杯 2023 省 B] 冶炼金属 经典二分&#xff0c;先在第一组中找到最小值&#xff0c;在利用最小值限制范围寻找最大值 #include <iostream> #include <algorithm> using namespace std; int n,kk; int m[10001],num[10001]; int maxs,mins;bool check1…

在Spring Boot中使用Validation进行表单验证

在开发Web应用程序时&#xff0c;表单验证是确保用户提供的数据符合预期格式和规则的重要步骤之一。Spring Boot提供了强大的支持来简化表单验证的实现&#xff0c;其中包括了Validation框架的集成。本文将介绍如何在Spring Boot应用程序中集成Validation&#xff0c;并展示如何…

Python每日三道经典面试题(十二)

1.Python中的函数是什么&#xff1f; 在Python中&#xff0c;函数是一个组织好的、可重复使用的代码块&#xff0c;用于执行一个特定的任务。函数提供了代码模块化和代码复用的能力。你可以将程序划分为多个独立的、功能性的小块&#xff1b;当你需要执行某个任务时&#xff0…

用c++实现装箱问题、数字回转方阵

3.4.1 装箱问题 【问题】有一个工厂制造的产品形状都是长方体&#xff0c;一共有6种型号,每种型号长方体的长和宽分别是11、22、33、44、55、66,高都是h。这些产品使用统一规格的箱子进行包装&#xff0c;箱子的长、宽和高分别是6、6和h。对于每个订单工厂希望用最少的箱子进行…