Python语法之正则表达式详解以及re模块中的常用函数
正则表达式详解及re模块中的常用函数
概念、作用和步骤
概念: 本身也是一个字符串,其中的字符具有特殊含义,将来我们可以根据这个字符串【正则表达式】去处理其他的字符串,比如可以对其他字符串进行匹配,切分,查找,替换等一系列操作。
作用:可以对其他字符串进行匹配,切分,查找,替换等处理操作。
编写的步骤:- 需要大量的文本信息——找规律——使用正则语法编写出正则表达式
是一个独立于任何一门语言的技术,任何一门语言中都可以使用同一个正则表达式去操作
语法
需要先导入内置函数re,import re
- 字符串本身就是一个正则表达式
- [] 表示可选项
代码展示:
import re
s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,邮箱是12345678@qq.com和12134.163.com。希望我的三个快递能找到'
r1 = re.findall(r'\d+[16]',s1)
print(r1,type(r1))
运行结果:

- 英文字母范围
- [a-z] 表示查找 a-z
- [A-Za-z]
- [0-9]
注意[]需要用’ '括起才能使用,否则报错
[**A-Za-z]不能改变如[A-z]因为使用的是ASCII码,会出现非英文部分。
代码展示:
s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'[f-z]',s1)
r2 = re.findall(r'[A-Za-z]',s1)
r3 = re.findall(r'[3-9]',s1)
print(r1)
print(r2)
print(r3)
运行结果:

- \d 数字
- **\d?**表示出现了0次或者1次
- \d+ 表示出现了1次或者n次
- \d*表示出现了0次或者n次
\d同时需’'括起使用
代码展示:
s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'\d',s1)
r4 = re.findall(r'\d?',s1)
r2 = re.findall(r'\d+',s1)
r3 = re.findall(r'\d*',s1)
print(r1)
print(r4)
print(r2)
print(r3)
运行结果:

- {}出现次数
- {m,n} 表示出现的次数范围,m表示至少出现的次数,n表述最多出现的次数
- {m,} 表示出现的次数,至少为m个,上不封顶
- {m} 表示出现了m次
代码展示:
s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,微信是微信2342345,qq是qq1234,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'1\d{1,2}',s1)
r2 = re.findall(r'是\d{,2}',s1)
r4 = re.findall(r'1\d{3,}',s1)
r3 = re.findall(r'\d{2}',s1)
print(r1)
print(r2)
print(r4)
print(r3)
运行结果:

- \w 表示英文字母大写或者小写,或者下划线,或者是中文汉字
- \W 表示除了大小写英文字母,数字,汉字,下划线之外,都能匹配
如果我们没有写re.ASCII参数,那么第一个\w+会将汉字也匹配上,因为\w本身就可以匹配汉字的,但是当我们加上了re.ASCII参数,python正则表达式匹配的时候,\w只会匹配ASCII码上有的字符。
代码展示:
s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,微信是微信2342345,qq是qq1234,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'\W',s1)
r2 = re.findall(r'qq\w+',s1)
r3 = re.findall(r'qq\w+',s1,re.ASCII)
print(r1)
print(r2)
print(r3)
运行结果:

-
匹配以某个字符串开头
- ^ 表示以某个字符串开头
.com在re里可写成\.com
代码展示:
s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,微信是wx2342345,qq是qq1234,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'qq\w+',s1,re.ASCII)
r2 = re.findall(r'12\w+\@\w+\.com',s1,re.ASCII)
s2 = '123ajdhsa2134'
s3 = 'ajdhsa$2134$'
r3 = re.findall(r'^aj',s2,re.ASCII)
r4 = re.findall(r'^aj',s3,re.ASCII)
print(r1)
print(r2)
print(r3)
print(r4)
运行结果:

- () 分组
可以
多个()进行分组,,结果按()顺序
代码展示:
s1 = '身份证号:342300200105198866'
r1 = re.findall(r'(342\d{3}(\d{4})(\d{4}))',s1,re.ASCII)
print(r1)
for i in r1:print(i)
运行结果:

- 或 | 多个字符之间的或使用小括号
代码展示:
s1 = '身份证号1:342300200105198866,另一个身份证号2:342200200806116688'
r1 = re.findall(r'(342\d{3}(\d{4})(\d{4}))',s1)
r2 = re.findall(r'(342(300|200)(\d{4})(\d{2})(\d{2}))',s1)
print(r1)
print(r2)
运行结果:

- . 表示任意字符
使用\转义字符,将.变成普通的点字符进行匹配
代码展示:
s1 = '今天天气正好,适合买xiaomipro,邮箱是12345678@qq.com'
r1 = re.findall(r'xiao.{5}',s1)
r2 = re.findall(r'天气.{5}',s1)
r3 = re.findall(r'12\d+@+\w+\.com',s1)print(r1)
print(r2)
print(r3)
运行结果:

re模块中的常用函数
- re.findall 在大字符串中查找符合正则表达式特点的式子
- re.match() 匹配整个字符串是否符合某个正则表达式特点
- re.search() 从左向右匹配正则表达式,只会匹配一次符合条件, 得到的是一个对象
match和search返回的是对象,需要group查看
代码展示:
s1 = '今天天气正好,适合买xiaomipro,邮箱是12345678@qq.com'
s2 = 'xiaom'
r1 = re.findall(r'xiao.{5}',s1)
r2 = re.match(r'xiao',s2)
r3 = re.match(r'xiao',s1)
r4 = re.search(r'xiao',s2)
print(r1)
print(r2)
print(r2.group())
print(r3)
print(r4)
print(r4.group())
运行结果:
- re.split()切割
代码展示:
s1 = 'xiaomi.pro@12345'
r1 = re.split(r'[.,@]',s1)
print(r1)
运行结果:

- re.finditer() 在大字符串中查找符合正则表达式特点的式子,得到的是一个迭代器
代码展示:
s1 = 'xiaomi.pro@12345'
r1 = re.finditer(r'[(\d+)]',s1,re.ASCII)
for i in r1:print(i.group())
print(r1)
运行结果:

- fullmatch() 将字符串整体与正则表达式进行匹配
代码展示:
text = '安徽省-合肥市'
res1 = re.fullmatch(f'(\w+)-(\w+)', text)
print(f"省份:{res1.group(1)}")
print(f"市:{res1.group(2)}")
运行结果:

相关文章:
Python语法之正则表达式详解以及re模块中的常用函数
正则表达式详解及re模块中的常用函数 概念、作用和步骤 概念: 本身也是一个字符串,其中的字符具有特殊含义,将来我们可以根据这个字符串【正则表达式】去处理其他的字符串,比如可以对其他字符串进行匹配,切分…...
《地球化学》
《地球化学》主要报道近代地球化学, 特别是其主要分支学科, 如岩石地球化学、元素地球化学、有机地球化学、环境地球化学、矿床地球化学、实验地球化学、生物地球化学、天体化学、计算地球化学、分析地球化学、海洋地球化学、沉积地球化学、纳米地球化学、油气地球化学和同位素…...
alpine openssl 编译
./config no-shared --prefix/usr/local/openssl apk add musl-dev gcc g apk add linux-headers ssh root 登录 编辑 SSH 配置文件 打开 SSH 配置文件 /etc/ssh/sshd_config: vi /etc/ssh/sshd_config PermitRootLogin yes...
【AI模型对比】AI新宠Kimi与ChatGPT的全面对比:技术、性能、应用全揭秘
文章目录 Moss前沿AI技术背景Kimi人工智能的技术积淀ChatGPT的技术优势 详细对比列表模型研发Kimi大模型的研发历程ChatGPT的发展演进 参数规模与架构Kimi大模型的参数规模解析ChatGPT的参数体系 模型表现与局限性Kimi大模型的表现ChatGPT的表现 结论:如何选择适合自…...
【C#设计模式(17)——迭代器模式(Iterator Pattern)】
前言 迭代器模式可以使用统一的接口来遍历不同类型的集合对象,而不需要关心其内部的具体实现。 代码 //迭代器接口 public interface Iterator {bool HashNext();object Next(); } //集合接口 public interface Collection {Iterator CreateIterator(); } //元素迭…...
二、部署docker
二、安装与部署 2.1 安装环境概述 Docker划分为CE和EE,CE为社区版(免费,支持周期三个月),EE为企业版(强调安全,付费使用)。 Docker CE每月发布一个Edge版本(17.03&…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg封装
封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…...
ML 系列:第 39 节 - 估计方法:最大似然估计 (MLE)
目录 一、说明 二、什么是最大似然估计 (MLE)? 2.1 理解公式 2.2 MLE 的定义 2.3 我们何时使用 MLE? 三、结论 一、说明 在统计学领域,我们经常需要根据观察到的数据估计统计模型的参数。为此目的广泛使用的两种关键方法是最大似然估计 ( MLE…...
Linux 权限管理:用户分类、权限解读与常见问题剖析
🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 目录 💯L…...
网络原理之 UDP 协议
目录 1. UDP 协议报文格式 2. UDP 的特点 (1) 无连接 (2) 不可靠 (3) 面向数据报 (4) 全双工 3. 基于 UDP 的应用层协议 前文是:UDP 的使用 首先了解一下基础知识: 1. UDP 协议报文格式 传输层最重要的协议有两个,一个是 TCP&#x…...
并发框架disruptor实现生产-消费者模式
Disruptor是LMAX公司开源的高性能内存消息队列,单线程处理能力可达600w订单/秒。本文将使用该框架实现生产-消费者模式。一、框架的maven依赖 <!-- https://mvnrepository.com/artifact/com.lmax/disruptor --><dependency><groupId>com.lmax<…...
【Vivado】xdc约束文件编写
随手记录一下项目中学到的约束文件编写技巧。 时序约束 创建生成时钟 参考链接: Vivado Design Suite Tcl Command Reference Guide (UG835) Vivado Design Suite User Guide: Using Constraints (UG903) 通过Clocking Wizard IP创建的时钟(MMCM或…...
Redis使用场景-缓存-缓存雪崩
前言 之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题,其中缓存穿透、击穿、雪崩在面试中问的最频繁,本文加了图解,希望帮助你更直观的了解缓存雪崩😀 (放出之前写的针对实习面试的关于Redis生产问题的博…...
概率论相关知识随记
作为基础知识的补充,随学随记,方便以后查阅。 概率论相关知识随记 期望(Expectation)期望的定义离散型随机变量的期望示例:掷骰子的期望 连续型随机变量的期望示例:均匀分布的期望 期望的性质线性性质期望的…...
【PlantUML系列】序列图(二)
目录 一、参与者 二、消息交互顺序 三、其他技巧 3.1 改变参与者的顺序 3.2 使用 as 重命名参与者 3.3 注释 3.4 页眉和页脚 一、参与者 使用 participant、actor、boundary、control、entity 和 database 等关键字来定义不同类型的参与者。例如: Actor&…...
WPF+MVVM案例实战与特效(三十四)- 日志管理:使用 log4net 实现高效日志记录
文章目录 1、概述2、日志案例实现1、LogHelper 类详解2、代码解释3、配置文件4、实际应用案例场景 1:记录系统运行日志场景 2:记录数据库操作日志场景 3:记录 HTTP 请求日志5、总结1、概述 在WPF软件开发中,良好的日志记录机制对于系统的调试、维护和性能优化至关重要。lo…...
前端测试框架 jasmine 的使用
最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前。通过对比我们选择了 Karma jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 Karma jasmine 前提是必须安装 Nodejs。 安装好 Nodejs ,使用 npm 安装好必要…...
Qwen2-VL视觉大模型微调实战:LaTex公式OCR识别任务(完整代码)
《SwanLab机器学习实战教程》是一个主打「开箱即用」的AI训练系列教程,我们致力于提供完善的数据集、源代码、实验记录以及环境安装方式,手把手帮助你跑起训练,解决问题。 Qwen2-VL是通义千问团队最近开源的大语言模型,由阿里云通…...
「Mac玩转仓颉内测版42」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。 关键词 小学奥数Python Cangjie几何计算 一、题目描述 编写一个程序&#…...
Groom Blender to UE5
Groom Blender to UE5 - Character & Animation - Epic Developer Community Forums Hello, 你好, While exporting my “groom” from blender to UE5, I notice that the curves have a minimal resolution in Unreal. However I would like to get the same …...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
