当前位置: 首页 > news >正文

正则表达式入门:Python ‘ re ‘ 模块详解

正则表达式(Regular Expression,简称 re)是一种强大而灵活的工具,广泛用于字符串匹配、替换和分割等操作,尤其在处理网页爬虫数据时非常有用。Python 提供了 " re " 模块来支持正则表达式的使用,本文将结合常见的用法和示例,带你快速入门。

正则表达式的常用方法

匹配字符串

1. ' search() '
' search() ' 方法用于在字符串中查找符合正则表达式的第一个匹配项。它从字符串的任意位置开始匹配,返回一个 ' Match ' 对象,或者在没有匹配时返回 ' None '。

import repattern = r"\d+"  # 匹配一个或多个数字
string = "The price is 100 dollars."match = re.search(pattern, string)
if match:print(f"Found: {match.group()} at position {match.start()}-{match.end()}")
else:print("No match found!")

2. ' match() ' 
' match() ' 方法用于从字符串的开头匹配,如果开头不符合正则表达式,则返回 ' None '。

pattern = r"\d+"  # 匹配一个或多个数字
string = "100 dollars"match = re.match(pattern, string)
if match:print(f"Matched: {match.group()}")
else:print("No match found!")

3. ' fullmatch() '
' fullmatch() ' 方法要求整个字符串完全符合正则表达式,否则返回 ' None '。

pattern = r"\d+"  # 匹配一个或多个数字
string = "100"match = re.fullmatch(pattern, string)
if match:print(f"Full match: {match.group()}")
else:print("No full match!")

4. ' findall() '
' findall() ' 方法返回一个列表,包含字符串中所有符合正则表达式的匹配项。

pattern = r"\d+"  # 匹配一个或多个数字
string = "There are 100 apples and 200 oranges."matches = re.findall(pattern, string)
print(f"All matches: {matches}")

5. ' finditer() '
' finditer() ' 方法返回一个迭代器,每个元素都是一个 ' Match ' 对象,表示字符串中每一个匹配项。

pattern = r"\d+"  # 匹配一个或多个数字
string = "There are 100 apples and 200 oranges."matches = re.finditer(pattern, string)
for match in matches:print(f"Found: {match.group()} at position {match.start()}-{match.end()}")

替换字符串

1. ' sub() '
' sub() ' 方法用于替换字符串中所有符合正则表达式的部分,返回替换后的新字符串。

pattern = r"\d+"  # 匹配一个或多个数字
string = "There are 100 apples and 200 oranges."
replacement = "many"new_string = re.sub(pattern, replacement, string)
print(new_string)  # 输出:There are many apples and many oranges.

2. ' subn() '
' subn() ' 方法与 ' sub() ' 类似,但它返回一个元组,包括替换后的字符串和替换次数。

pattern = r"\d+"  # 匹配一个或多个数字
string = "There are 100 apples and 200 oranges."
replacement = "many"new_string, count = re.subn(pattern, replacement, string)
print(new_string)  # 输出:There are many apples and many oranges.
print(f"Replacements made: {count}")

分割字符串


 1. ' split() '
' split() ' 方法用于根据正则表达式匹配项来分割字符串,返回分割后的列表。

pattern = r"\s+"  # 匹配一个或多个空白字符
string = "This is a test."parts = re.split(pattern, string)
print(parts)  # 输出:['This', 'is', 'a', 'test.']

正则表达式中的特殊字符

在编写正则表达式时,理解特殊字符的用法非常重要。以下是一些常用的特殊字符:

' \w ':匹配字母、数字、下划线。
' \W ':匹配非字母、数字、下划线的字符。
' \d ':匹配数字

' \D ':匹配非数字字符。
' \s ':匹配空白字符(包括空格、制表符等)。
' \S ':匹配非空白字符。
' . ':匹配除换行符 ' \n ' 之外的任意字符(如果使用 ' re.S ' 标志,可以匹配包括换行符在内的所有字符)。
' ^ ':匹配字符串的开头(如果使用 ' re.M ' 标志,可以匹配每一行的开头)。
' $ ':匹配字符串的结尾(如果使用 ' re.M ' 标志,可以匹配每一行的结尾)。

贪婪与非贪婪匹配

正则表达式中的量词(如 ' * '、' + ' 和 ' ? ')默认情况下是贪婪的,它们会尽可能多地匹配字符。要进行非贪婪(尽可能少的匹配),可以在量词后加上 ' ? '。

' * ':匹配前面的字符 0 次或多次。
' + ':匹配前面的字符 1 次或多次。
' ? ':匹配前面的字符 0 次或 1 次。
' {n} ':匹配前面的字符恰好 n 次。
' {m,n} ':匹配前面的字符至少 m 次,至多 n 次。
' {m,n}? ':非贪婪地匹配前面的字符至少 m 次,至多 n 次。

字符类和分组

' [] ':定义一个字符类,匹配其中的任意一个字符。例如,' [aeiou] ' 匹配任意一个元音字母。
' | ':表示逻辑或,匹配 ' | ' 左右两边的任意一个表达式。例如,' a|b ' 匹配 "a" 或 "b"。
' () ':用于分组,可以将多个字符组合在一起作为一个单元,或者用于提取匹配到的子串。

示例:结合网页爬虫数据解析假设我们正在处理一段 HTML 数据,想要提取所有的 ' <a> ' 标签中的链接。我们可以使用正则表达式来简单地实现这一操作。

import rehtml_data = '''
<a href="https://example.com">Example</a>
<a href="https://another-example.com">Another Example</a>
'''# 正则表达式模式,用于匹配 href 属性中的 URL
pattern = r'href="(https?://[^"]+)"'# 使用 findall() 提取所有匹配的 URL
urls = re.findall(pattern, html_data)
print(urls)

在这个示例中,' (https?://[^"]+) ' 部分表示匹配 "http://" 或 "https://" 开头,后面跟随任意非引号的字符串,直到下一个引号为止。通过 ' re.findall() ',我们可以轻松提取出所有符合条件的链接。

总结

Python 的 ' re ' 模块提供了强大的正则表达式支持,使得字符串的匹配、替换和分割操作变得非常灵活和高效。无论是在处理爬虫数据还是在其他文本处理任务中,掌握正则表达式都将大大提升你的工作效率。

记住,正则表达式虽然强大,但也容易变得复杂,因此在使用时应尽量保持模式的简洁和可读性。同时,随着经验的积累,你会逐渐发现正则表达式的更多妙用。Happy coding!

相关文章:

正则表达式入门:Python ‘ re ‘ 模块详解

正则表达式&#xff08;Regular Expression&#xff0c;简称 re&#xff09;是一种强大而灵活的工具&#xff0c;广泛用于字符串匹配、替换和分割等操作&#xff0c;尤其在处理网页爬虫数据时非常有用。Python 提供了 " re " 模块来支持正则表达式的使用&#xff0c;…...

thinkphp8.0+aliapy(支付宝)pc网站支付

环境&#xff1a;宝塔-centOS8.5,php8.3 第一步&#xff1a;安装alipay v3版本的安装依赖包&#xff1b; composer require alipaysdk/openapi:dev第二步&#xff1a;根据官方文档,把支付相关的类引用进来&#xff1b; <?php declare (strict_types 1);namespace app\p…...

高速信号的眼图、加重、均衡

目录 高速信号的眼图、加重、均衡眼图加重均衡线性均衡器CTLE判决反馈均衡器DFE 高速信号的眼图、加重、均衡 眼图 通常用示波器观察接收信号波形的眼图来分析码间串扰和噪声对系统性能的影响&#xff0c;从而估计系统优劣程度&#xff0c;因而眼图分析是高速互连系统信号完整…...

2024年PMP考前冲刺必背的学习笔记,整理好给你!

项目的四大特点:临时性、独特性、变革驱动性和创造商业价值。 项目管理&#xff1a;将知识、技能、工具与技术应用于项目活动&#xff0c;以满足项目的要求 Pestle&#xff1a;P政治&#xff0c;E经济&#xff0c;S社会&#xff0c;T技术&#xff0c;L法律&#xff0c;E环境 …...

增加服务器带宽可以提高资源加载速度吗?

答案是可以的 &#xff0c;增加服务器带宽通常能够提高资源加速速度。带宽是服务器与互联网之间传输数据的速率&#xff0c;它决定了在单位时间内可以传输的数据量。以下是增加带宽如何提高资源加速速度的几个方面&#xff1a; 1.更快的数据传输&#xff1a;带宽增加后&#xf…...

汽车EDI: NAVISTAR EDI对接

Navistar International Corporation 是一家美国商用车辆制造公司&#xff0c;总部位于伊利诺伊州的Lisle。公司以生产中型和重型卡车、公共汽车、柴油发动机和底盘闻名&#xff0c;其产品广泛应用于运输、建筑、和农业等行业。Navistar 的历史可以追溯到1831年&#xff0c;由国…...

【Word多级标题完整设置】设置各级标题样式将多级列表链接到各级标题样式中

Word多级标题完整设置 一、设置各级标题样式主标题样式设置中英文字体、字形以及字号设置段落设置&#xff08;缩进、间距和行距&#xff09; 一级标题样式设置中英文字体、字形以及字号设置段落设置&#xff08;缩进、间距和行距&#xff09; 二级标题样式设置中英文字体、字形…...

不同分辨率下vue页面的高度自适应

1. 使用视口单位 .element { height: 100vh; /* 使得元素高度等于视口高度的100% */ /* 可以减去一部分高度以适应页眉或页脚 */ height: calc(100vh - 100px); } 2. 使用百分比&#xff08;%&#xff09;高度 .parent { height: 100vh; /* 父元素高度等于视口高度 */…...

“野生钢铁侠 “ 稚晖君一连亮出5 款智元人形机器人,地表最强!

打麻将、拆快递、纽扣穿针&#xff0c;还能做 30KG 重物提拉&#xff01; 沉寂一年&#xff0c;稚晖君带着他的二代机器人全家桶重磅回归&#xff0c;秀出的各种新技能令人眼前一亮。 智东西 8 月 18 日报道&#xff0c;今日&#xff0c;" 野生钢铁侠 " 稚晖君一连亮…...

JSON Web Token (JWT): 理解与应用

JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间以JSON对象的形式安全地传输信息。JWT通常用于身份验证和授权目的&#xff0c;因为它可以使用JSON对象在各方…...

LeetCode面试题Day12|LC209 长度最小的子数组、LC30 串联所有单词的子串

题目一&#xff1a; 指路&#xff1a; . - 力扣&#xff08;LeetCode&#xff09;209 长度最小的子数组 思路与分析&#xff1a; 滑动窗口&#xff0c;目的在于降低算法的时间复杂度&#xff0c;每次只维护一定长度的数组而非原数组的全部元素。那么既然需要长度&#xff0…...

【开端】JAVA泛型类的使用

一、这是一个类 public class CommonVo<D extends CommonDao> implements Serializable { 我们来探讨一样 CommonVo<D extends CommonDao> 这个尖括号里到底能写啥。 首先这是一个泛型类型D &#xff0c;D类继承了CommonDao&#xff0c;说明尖括号里只要放入一…...

mp3转换器免费有哪些?6个音频转换器助你一键转换各种音频

音乐如同生活的调味剂&#xff0c;让每一个平凡瞬间都跃动着不凡的旋律。 但有时候&#xff0c;当你想把这些歌曲放到你的设备上时&#xff0c;却发现格式不兼容&#xff0c;无法播放。 别担心&#xff01;接下来&#xff0c;我们将介绍几款免费mp3转换工具&#xff0c;它们能…...

力扣爆刷第174天之TOP200五连刷136=140(最小k数、字典序、跳跃游戏)

力扣爆刷第174天之TOP200五连刷136140&#xff08;最小k数、字典序、跳跃游戏&#xff09; 文章目录 力扣爆刷第174天之TOP200五连刷136140&#xff08;最小k数、字典序、跳跃游戏&#xff09;一、LCR 159. 库存管理 III二、450. 删除二叉搜索树中的节点三、440. 字典序的第K小…...

蚁群算法原理与实战(Python、MATLAB、C++)

蚁群算法 1.蚁群算法来源 蚁群算法&#xff08;Ant Colony Optimization&#xff0c;简称ACO&#xff09;是一种模拟自然界中蚂蚁寻找食物路径行为的优化算法&#xff0c;主要用于解决组合优化问题。它的灵感来源于意大利学者Marco Dorigo在1992年提出的蚂蚁系统模型。 蚁群算…...

HTML静态网页成品作业(HTML+CSS)——非遗阜阳剪纸介绍设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…...

如何做萤石开放平台的物联网卡定向?

除了用萤石自带的4G卡外&#xff0c;我们也可以自己去电信、移动和联通办物联网卡连接萤石云平台。 1、说在前面 注意&#xff1a;以下流程必须全部走完&#xff0c;卡放在设备上才能连接到萤石云平台。 2、大致流程 登录官网→下载协议→盖章&#xff08;包括骑缝章&#…...

ptrade排坑日记——定时任务执行后,文件权限会变化。

前言 今天要和大家分享的是使用ptrade的定时任务过后&#xff0c;执行的时候&#xff0c;文件权限会发生变化&#xff01; 一、问题描述 定时任务执行后&#xff0c; /home/fly/data/fundamentals_daily/all.pickle、/home/fly/data/valuation_new/all.pickle 文件权限会从…...

TILs 评分:TCGA 肿瘤浸润淋巴细胞病理切片深度学习评分!图片下载与可视化

生信碱移 病理切片的TILs评分 TCGA 数据库是最大的肿瘤组学公开数据库之一。尽管如此&#xff0c;更多的研究往往仅局限于关注 TCGA 中各类肿瘤样本的上游组学信息或基本病理特征&#xff0c;而忽略了对样本数字化 H&E 病理染色图像的进一步应用。 ▲ TCGA中肿瘤样本的病…...

【运维】如何在浏览器中查看和管理 Cookie 信息?

如何在浏览器中查看和管理 Cookie 信息 引言 Cookie 是我们日常浏览网页时经常遇到的一个重要概念。它们用于存储用户的登录状态、偏好设置以及其他相关信息,帮助网站提供个性化的体验。然而,很多人并不清楚如何在浏览器中找到并查看这些 Cookie 信息。本文将带您了解如何在…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...