Python 正则表达式(re)

  🚀 个人主页:xmp65535

  🚀 专栏:python技术专栏


目录

一、概述

二、基本概念

模式字符串

原始字符串

编译正则表达式

三、正则表达式的基本模式匹配

字符匹配

锚点

量词

四、常用函数

re.match()

re.search()

re.findall()

re.finditer()

re.sub()

五、高级主题

分组和捕获

非贪婪匹配

前瞻和后顾(零宽断言)

六、编译正则表达式

七、错误处理


一、概述

正则表达式是一种强大的字符串匹配工具,通过定义搜索模式,可以在文本中搜索、替换符合条件的字符串。在 Python 中,正则表达式模块由 re 提供支持。本文将详细介绍正则表达式的语法、常用函数和高级用法。

二、基本概念

模式字符串

正则表达式由模式字符串定义,它包含了正则表达式的语法和符号。

原始字符串

建议使用原始字符串(前面带有r的字符串)来表示模式字符串,这样可以避免转义字符带来的混淆。

pattern = r'\bfoo\b'
编译正则表达式

虽然可以直接使用正则表达式,但编译正则表达式可以提高效率,尤其是在多次使用同一表达式时。

compiled_pattern = re.compile(r'\bfoo\b')

三、正则表达式的基本模式匹配

字符匹配
  • .:匹配除换行符以外的任何单个字符
  • [...]:匹配字符集合中的一个字符
  • [^...]:匹配不在字符集合中的一个字符
  • \d:匹配任何数字,等价于[0-9]
  • \D:匹配任何非数字字符,等价于[^0-9]
  • \s:匹配任何空白字符,包括空格、制表符、换页符等,等价于[ \t\n\r\f\v]
  • \S:匹配任何非空白字符,等价于[^ \t\n\r\f\v]
  • \w:匹配任何字母数字字符,等价于[a-zA-Z0-9_]
  • \W:匹配任何非字母数字字符,等价于[^a-zA-Z0-9_]
锚点
  • ^:匹配字符串的开头
  • $:匹配字符串的结尾
  • \A:匹配字符串的开始(不受多行模式的影响)
  • \Z:匹配字符串的结束(不受多行模式的影响)
  • \b:匹配一个单词边界
  • \B:匹配非单词边界
量词
  • *:匹配前面的子表达式零次或多次
  • +:匹配前面的子表达式一次或多次
  • ?:匹配前面的子表达式零次或一次
  • {n}:匹配前面的子表达式恰好n次
  • {n,}:匹配前面的子表达式至少n次
  • {n,m}:匹配前面的子表达式至少n次,但不超过m次

四、常用函数

re.match()

re.match()函数从字符串的开始处匹配正则表达式。如果匹配成功,返回一个匹配对象;否则返回None

match = re.match(r'\d+', '123abc')
if match:print('Found:', match.group(0))
re.search()

re.search()函数在整个字符串中搜索匹配的正则表达式,返回第一个匹配对象。

search = re.search(r'\d+', 'abc123def')
if search:print('Found:', search.group(0))
re.findall()

re.findall()函数返回字符串中所有匹配正则表达式的部分的列表。

findall = re.findall(r'\d+', '123abc456def')
print('All matches:', findall)
re.finditer()

re.finditer()函数返回一个迭代器,其中包含字符串中所有匹配正则表达式的部分。

for match in re.finditer(r'\d+', '123abc456def'):print('Found:', match.group(0))
re.sub()

re.sub()函数用于替换字符串中匹配正则表达式的部分。

replaced = re.sub(r'\d+', 'number', '123abc456def')
print('Replaced:', replaced)

五、高级主题

分组和捕获

使用圆括号进行分组,可以在后面引用这些分组。

grouped = re.search(r'(\d+).+(\d+)', '123abc456def')
if grouped:print('First group:', grouped.group(1))print('Second group:', grouped.group(2))
非贪婪匹配

在Python的re模块中,正则表达式默认是贪婪匹配。这意味着在进行匹配时,正则表达式会尽可能地匹配更多的字符。

在量词(*, +, ?, {n,m})后面加上?,可以进行非贪婪匹配,即尽可能少地匹配字符。

nongreedy = re.search(r'\d+?', '123abc')
if nongreedy:print('Non-greedy match:', nongreedy.group(0))
前瞻和后顾(零宽断言)

使用前瞻和后顾可以在不包含在匹配中的情况下,断言此位置前后是否能匹配模式。

  • 正前瞻 (?=...):匹配...前面的位置。
  • 负前瞻 (?!...):匹配不在...前面的位置。
  • 正后顾 (?<=...):匹配...后面的位置。
  • 负后顾 (?<!...):匹配不在...后面的位置。
lookahead = re.search(r'\d(?=\D)', '123abc')
if lookahead:print('Lookahead match:', lookahead.group(0))

六、编译正则表达式

re.compile()

re.compile() 函数是 re 模块中的一个重要函数,它用于将正则表达式的字符串形式编译成一个 Pattern 对象。预编译可以让你在后续的查找或匹配中重复使用该正则表达式,而无需每次使用时都重新编译,这样可以提高效率。

import re# 将正则表达式编译成Pattern对象
pattern = re.compile(r'\d+')  # 匹配一个或多个数字# 使用Pattern对象进行匹配
match_result = pattern.match('123abc')
if match_result:print(match_result.group())  # 输出:123search_result = pattern.search('abc123def')
if search_result:print(search_result.group())  # 输出:123# 使用Pattern对象查找所有匹配项
findall_result = pattern.findall('123abc456def')
print(findall_result)  # 输出:['123', '456']# 使用Pattern对象进行迭代查找
for match in pattern.finditer('123abc456def'):print(match.group())  # 输出:123 然后 456# 使用Pattern对象替换字符串中的模式
sub_result = pattern.sub("#", '123abc456def')
print(sub_result)  # 输出:#abc#def

re.compile() 函数接受一个额外的标志参数 flags,这些标志可以改变正则表达式的工作方式。例如:

  • re.IGNORECASE 或 re.I:忽略大小写。
  • re.MULTILINE 或 re.M:多行模式,改变 ^ 和 $ 的行为。
  • re.DOTALL 或 re.S:使 . 匹配任何字符,包括换行符。

例如,如果我们想让正则表达式忽略大小写,可以这样编译它:

pattern = re.compile(r'[a-z]+', re.I)

这个编译后的 Pattern 对象可以用来匹配任意字母序列,不论大小写。

七、错误处理

使用re模块时,可能会遇到re.error异常,通常是因为正则表达式的语法错误。

try:re.search(r'(\d', '123abc')  # 缺少闭合的圆括号
except re.error as e:print('Regex error:', e)

这个简介涵盖了Python中re模块的基本使用和主要功能。要精通正则表达式,需要大量的练习和对复杂文本模式的理解。正则表达式是一个强大的工具,但也需要谨慎使用,因为复杂的表达式可能难以维护和理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802771.shtml

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

相关文章

Mybase 8.x 下载安装试用详细教程(Windows)

一、软件介绍 MyBase是一款本地笔记软件&#xff0c;它能够帮助你管理和组织大量的信息。 二、下载安装 下载&#xff1a;点我去下载页面 Mybase 软件目前主要实现了两种版本&#xff1a;Mybase Desktop (桌面版) 和 Mybase Server (网络版)&#xff1a; 桌面版软件运行于 …

零售行业数字化广告评价标准 - 《IAB/MRC零售(广告)测量指南》

IAB/MRC零售&#xff08;广告&#xff09;测量指南 --- 最新标准&#xff0c;2024年1月发布 目录 1出台此标准的目的是什么&#xff1f;2标准宗旨3本标准的主要关键领域4为什么这对品牌和零售商很重要5能给零售媒体中小型玩家带来什么机会&#xff1f;6评价零售媒体效果的最…

金仓数据库Kingbase的数据库开发管理工具KStudio连接乱码

背景&#xff1a; 金仓数据库V8R6&#xff0c;KStudio在Windows10上运行&#xff0c;JDK8 问题&#xff1a; 使用客户端连接数据库时&#xff0c;提示信息乱码&#xff0c;首选项设置字符集不管用&#xff0c;具体如下图所示&#xff1a; Before&#xff1a; After&#xff1…

谷歌(Google)历年编程真题——给字符串添加加粗标签

谷歌历年面试真题——数组和字符串系列真题练习。 给字符串添加加粗标签 给定字符串 s 和字符串数组 words。 对于 s 内部的子字符串&#xff0c;若其存在于 words 数组中&#xff0c; 则通过添加闭合的粗体标签 <b> 和 </b> 进行加粗标记。 如果两个这样的子字…

软件设计师——1.备考提纲

知识点说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、设计模式16.00%数据结构与算法10数组、栈、队列、树与二叉树、图、查找与排序、常见算法13.33%程序设计语言6文法…

【CPA考试】2024注册会计师报名照片尺寸要求解读及手机拍照方法

随着2024年注册会计师考试的临近&#xff0c;众多会计专业人士和学生都开始准备报名参加这一行业的重要考试&#xff0c;报名时间为4月8日至4月30日。报名过程中&#xff0c;一张符合要求的证件照是必不可少的。本文将为您详细解读2024年注册会计师考试报名照片的尺寸要求&…

sfml sdl2 windows vscode 调试和coderunner插件运行

链接库写在编译链接命令里&#xff0c;如果没有使用到不会加入到生成的可执行文件里。所以tasks.json可以这样写&#xff0c; {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C: g.exe 生…

GlusterFS分布式文件系统

一、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选&#xff0c;根据需要选择使用)组成。没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性 二、GlusterFS特点 2.1 扩展性和高性能 Glu…

结合 linux 0.11 源码分析为什么 fork 函数会返回两个值

#&#xff08;1&#xff09;学习资料是这些书 以及赵炯博士的完全剖析。谢谢这些大师与网上优秀的文章。 #&#xff08;2&#xff09;看 linux 0.11 源码是 sourceinlight 4.这里附上一个安装包。 由本图可知&#xff0c; main 函数对 fork 函数的调用。 fork 函数实际是定…

掌握苹果电脑保养秘籍,全方位维护指南!

苹果电脑&#xff08;Mac&#xff09;凭借卓越的性能表现、精致的设计美学以及深入人心的操作系统体验赢得了全球用户的高度评价。不过&#xff0c;无论是哪款顶级配置的Mac产品&#xff0c;都需要经过适时且恰当的保养维护&#xff0c;才能持续展现最优性能。 苹果电脑维护小…

python应用题例子--改试卷

要求&#xff1a;在现实生活中&#xff0c;写一些小函数帮助老师改卷子&#xff0c;比如选择题&#xff0c;本次数学题有12道&#xff0c;正解答案是ABCDCCDDBABA,请根据正确答案&#xff0c;找出学生的错误题并统计正常率。 CORRECT_ANSWERS"ABCDCCDDBABA" #一般习…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

Django之五种中间件定义类型—process_request、process_view、process_response.......

目录 1. 前言 2. 基础中间件 3. 如何自定义中间件 4. 五种自定义中间件类型 4.1 process_request 4.2 process_view 4.3 process_response 4.4 process_exception 4.5 process_template_response 5. 最后 1. 前言 哈喽&#xff0c;大家好&#xff0c;我是小K,今天咋们…

openhomeny鸿蒙arkts笔记

基于api9&#xff0c;创建arkts file&#xff0c;之前是java或者kotlin代码&#xff0c;转鸿蒙代码的一些笔记 1、final用readonly代替 2、Exception用Error代替 3、String用string代替 4、int&#xff0c;long&#xff0c;float&#xff0c;double等用number代替 5、要给…

探索GlassWire:网络安全与流量监控软件

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍1、GlassWire(免费版本)2、核心特点二、下载安装① 下载(免费版本)② 安装三、使用方法①如何使用?②语言切换③流量监控四、总结

Pytest教程:一文了解如何使用 pytest_runtest_makereport 修改 Pytest 测试报告内容

在软件测试过程中&#xff0c;生成清晰、易读的测试报告对于团队交流、问题追踪和项目进度评估至关重要。Pytest 是一个功能强大的 Python 测试框架&#xff0c;它不仅支持丰富的断言和测试用例组织方式&#xff0c;还提供了灵活的插件系统和钩子函数&#xff0c;可以帮助我们定…

window安装maven和hadoop3.1.4

前面的文章已讲解如何安装idea和进行基本设置&#xff0c;本文主要带着大家安装配置好maven和hadoop. 大家不用去官网下载&#xff0c;直接使用我发给大家的压缩文件&#xff0c;注意解压后的文件夹不要放在中文目录下&#xff0c;课堂上我们讲解过原因。 这是我电脑上的路径&a…

程序如何注入钩子

引言 相信大家都不想自己的代码被人拿出去做一些商业化的行为&#xff0c;但是一时半会又没有一个有效的方法&#xff0c;这里我提供一点思路。 常用的钩子程序植入方式 方式解释使用难度描述植入通知程序&#xff08;直接植入&#xff09;使用APi调用接口形式通知远程服务端程…

Python零基础从小白打怪升级中~~~~~~~入门

第二节&#xff1a;Python入门&#xff08;二&#xff09; 一、输入函数 input(“提示信息”) 当程序执行到 input&#xff0c;等待用户输入&#xff0c;输入完成之后才继续向下执行。在Python中&#xff0c;input 接收用户输入后&#xff0c;一般存储到变量&#xff0c;方便…

【每日一题】CF1607 D. Blue-Red Permutation | 贪心 | 简单

题目内容 原题链接 给定一个长度为 n n n 的数组 a a a &#xff0c;以及一个长度为 n n n 的字符串 s s s &#xff0c;字符要么为 B 要么为 R。 一次操作中&#xff0c;可以选择一个下标 i i i &#xff1a; 如果 s i s_i si​ 为 B &#xff0c;可以将 a i a_i ai​…