Python中的正则表达式
一正则表达式使用1.什么是正则表达式正则表达式其实就是一套固定的规则这套规则限制着字符串或者说是在过滤字符串比如规则 \d{11}匹配11位数字用来验证手机号规则 \w\w.\w匹配邮箱格式核心用途验证:判断字符串是否符合规则(比如手机号、邮箱、身份证号格式是否正确);查找:从文本中找出所有符合规则的字符串(比如从新闻中提取所有日期);提取:从匹配结果中提取关键信息(比如从邮箱中提取用户名);替换:替换文本中符合规则的内容(比如过滤文本中的特殊字符)。使用正则表达式之前需要进行导包import re使用正则表达式的核心流程定义规则-执行匹配-提取结果import re #导入正则表达式模块 res re.match(rh\w,hello world) if res: print(res.group()) else: print(匹配失败)re.match()只会根据字符的开头进行匹配如果开头错误会直接失败失败会返回None。2.匹配单个字符的规则符号符号 / 写法匹配规则补充说明.匹配除换行符\n外的任意单个字符开启re.DOTALL标志后可匹配包含换行符在内的所有字符[abc]匹配方括号内列举的任意一个字符集合内为 “或” 逻辑绝大多数元字符如.、*在集合内会失去特殊含义仅作为普通字符匹配[a-z]匹配指定字符范围内的任意一个字符用-连接起止字符支持[0-9]、[A-Za-z]等组合-放在集合首尾时仅作为普通横杠字符匹配[^abc]匹配不在方括号内的任意一个字符^必须放在集合开头才表示取反放在集合中间时仅作为普通字符匹配\d匹配任意单个数字字符ASCII 模式等价于[0-9]Python 3 默认 Unicode 模式还会匹配全角数字等开启re.ASCII后仅匹配半角数字\D匹配任意单个非数字字符\d的取反形式ASCII 模式等价于[^0-9]\w匹配任意单个单词字符ASCII 模式等价于[A-Za-z0-9_]Unicode 模式下还会匹配中文等语言文字\W匹配任意单个非单词字符\w的取反形式ASCII 模式等价于[^A-Za-z0-9_]\s匹配任意单个空白字符包含空格、制表符\t、换行符\n、回车符\r、换页符\f、垂直制表符\v\S匹配任意单个非空白字符\s的取反形式\转义符将正则元字符转义为普通字面字符用于匹配符号本身例如\.匹配字面点号、\[匹配左中括号、\\匹配反斜杠本身3.匹多个字符的规则符号符号 / 写法匹配规则补充说明*匹配前面的字符 / 分组 0 次或多次贪婪模式尽可能多地匹配目标内容等价写法为{0,}匹配前面的字符 / 分组 1 次或多次贪婪模式被匹配内容至少出现 1 次等价写法为{1,}?匹配前面的字符 / 分组 0 次或 1 次贪婪模式用于标记可选内容等价写法为{0,1}{n}匹配前面的字符 / 分组恰好 n 次n 为非负整数例如\d{4}可匹配连续 4 位数字{n,}匹配前面的字符 / 分组至少 n 次贪婪模式匹配次数无上限优先匹配尽可能多的内容{n,m}匹配前面的字符 / 分组 n 到 m 次贪婪模式包含 n 次和 m 次边界优先匹配更多次数量词?将贪婪量词转为非贪婪惰性模式尽可能少匹配常见写法*?、?、??、{n,m}?正则默认贪婪匹配追加?后转为最少匹配( )分组将括号内的多字符视为一个整体可配合量词实现重复匹配例如(ab)可匹配ab、abab等同时会捕获分组内的匹配结果OK那现在就可以施展他们两的组合技了\d* 匹配任意数量的数字字符\d 匹配任意数量的数字字符。# \d* 匹配任意数量的数字字符 res1 re.match(\d*,123abc) print(res1.group()) # \d 匹配任意数量的数字字符 res2 re.match(\d,123abc) print(res2.group())他两的区别就是d*的结果可以为0以上的结果d只能为1以上的结果\d? 最多匹配一个数字字符# \d? 最多匹配一个数字字符 res re.match(\d?,123abc) print(res.group())手机格式验证phone1 13212345678 phone2 1321234567 phone3 132abcdefgh res1 re.match(\d{11},phone1) print(res1.group()) # 输出13212345678 res2 re.match(\d{11},phone2) print(res2.group()) # 报错AttributeError res3 re.match(\d{11},phone3) print(res3.group()) # 报错AttributeError4.核心规则匹配开头和结尾用^和$限定字符串的开头和结尾确保整个字符串完全符合规则避免部分匹配。其实核心的意思就是打假^打假开头防止尾部符合开头不符合规则$符号打假尾部防止开头符合尾部不符合。邮箱格式验证# 邮箱规则数字/字母/下划线开头后面是数字字母.后面是2-4位字母 #这里的\.表示只匹配.;如果写.表示匹配除换行符以外的所有字符 pattern r^\w\w\.\w{2,4}$ # 要验证的邮箱 email1 abc123qq.com # 结果abc123qq.com email2 abc123.xyz # 结果abc123.xyz email3 abc123.com # 结果格式错误 email4 abc123qq.com.cn # 结果格式错误 for email in [email1,email2,email3,email4]: res re.match(pattern,email) if res: print(res.group()) else: print(格式错误)5.核心规则匹配分组进阶用将部分规则分组可实现“多选一”或“引用分组结果”适合复杂匹配场景。5.1多选一|规则规则1|规则2|规则3匹配任意一个符合的规则只要符合其中一条就能输出否则报错。pattern r(red|blue|black) string1 blue string2 green res1 re.match(pattern,string1) res2 re.match(pattern,string2) print(res1.group()) #输出blue print(res2.group()) #不匹配程序报错5.2引用分组结果\num用\num引用前面第num个分组匹配的内容比如匹配成对的HTML标签适合成双成对出现的字符。张三在前面出现过后面就使用 \数字 来代替这里注意数字取决于第几个分组而分组使用来表示分组。#htmllogin/html pattern r(\w)\w/\1 string1 htmllogin/html string2 htmllogin/body res1 re.match(pattern,string1) res2 re.match(pattern,string2) print(res1.group()) #输出htmllogin/html print(res2.group()) #不匹配程序报错二常用函数回顾re.match()功能从字符串开头开始匹配开头不符合就返回None。res1 re.match(th,this is a good day) print(res1.group()) #输出th res2 re.match(th,a good day) print(res2.group()) #报错2.1核心函数re.search()——全局找第一个匹配功能·search()会遍历整个字符串不管开头是否匹配只要找到第一个符合规则的就返回结果如果没有就返回None相当于文档里面的查找功能。res1 re.search(good,this is a good day) print(res1.group()) #输出good res2 re.search(is,this is a good day) print(res2.group()) #输出is(出现多次只会返回第一个) res3 re.search(cc,this is a good day) print(res3) #输出None2.2核心函数re.findall()——找所有匹配项返回列表功能findall()会遍历整个字符串找到所有符合规则的非重叠子串并将所有获取到的结果以列表的形式返回如果没有找到就返回空列表。res1 re.findall(r\d,abcd1234#$) print(res1) #输出[1, 2, 3, 4] res2 re.findall(r\w{3},good123ABC_xyz) print(res2) #输出[goo, d12, 3AB, C_x] res3 re.findall(r\d,abcd#$) print(res3) #输出[]2.3核心函数re.sub()——替换匹配项功能sub()会遍历字符串将所有匹配到规则的子串替换成指定内容可以指定替换次数默认情况下替换所有匹配项。res1 re.sub(is,am,hello,everyone! this is a good day!) print(res1) #输出hello,everyone! tham am a good day! res2 re.sub(is,am,hello,everyone! this is a good day!,count1) print(res2) #输出hello,everyone! tham is a good day!只替换第一个 res3 re.sub(r\d,*,今天是第23天温度是36°湿度是48%) print(res3) #输出今天是第**天温度是**°湿度是**% res4 re.sub(r\W,,sajs%^$sa) print(res4) #输出sajssa(删除所有特殊符号)三贪婪匹配非贪婪匹配3.1什么是贪婪匹配/非贪婪匹配正则贪婪模式默认量词如*、、{mn}会尽可能的匹配多的字符一直到无法匹配为止。非贪婪模式在量词后加量词会尽可能匹配少的字符满足规则即可。3.2关键前提只影响量词的匹配行为受影响的量词不受影响的规则.、\d、[a-z]等单个字符匹配规则。3.3贪婪模式正则默认是贪婪模式不用额外加任何符号量词会自动匹配尽可能多的字符。这里可以理解为规则范围内取最大值作为标准。res1 re.match(r\d*,1234abcd) print(res1.group()) #输出1234 res2 re.match(r\d,1234abcd) print(res2.group()) #输出1234 res3 re.match(r\d{2,3},1234abcd) print(res3.group()) #输出1233.4非贪婪模式量词后面加能少拿就少拿。这里可以理解为规则范围内取最小值作为标准。res1 re.match(r\d*?,1234abcd) print(res1.group()) #输出空字符串 res2 re.match(r\d?,1234abcd) print(res2.group()) #输出1 res3 re.match(r\d{2,3}?,1234abcd) print(res3.group()) #输出12重点实例模糊匹配中的差异注意需要加在量词后面res_greedy re.match(ra.*b,string) res_non_greedy re.match(ra.*?b,string) print(res_greedy.group()) #输出a123b123b print(res_non_greedy.group()) #输出a123b3.5什么时候适合使用非贪婪模式常见场景1.提取“最近匹配”的内容如上面的a.*?b提取a到最近的b2.避免匹配范围“过度扩大”如提取HTML标签时避免把多个标签当成一个3.明确需要“最少匹配”的场景如匹配2-5个数字只需要前2个示例提取HTML标签中的内容非贪婪必用string div第一部分/divdiv第二部分/div res_greedy re.match(rdiv.*/div,string) res_non_greedy re.match(rdiv.*?/div,string) print(res_greedy.group()) #输出div第一部分/divdiv第二部分/div print(res_non_greedy.group()) #输出div第一部分/div

相关新闻

VMware安装openEuler 24.03 LTS SP3全攻略

VMware安装openEuler 24.03 LTS SP3全攻略

1. 环境准备与镜像获取在VMware中安装openEuler-24.03-LTS-SP3之前,需要先准备好必要的环境和安装镜像。这个环节看似简单,但实际操作中很多新手容易在镜像选择和虚拟机配置上踩坑。1.1 获取官方镜像openEuler官网提供了多个版本的下载选项,我…

2026/7/14 6:07:20 阅读更多 →
AI 时代的技术管理者成长路径:从执行者到决策者的 5 个台阶

AI 时代的技术管理者成长路径:从执行者到决策者的 5 个台阶

文章目录 AI 时代的技术管理者成长路径:从执行者到决策者的 5 个台阶 引言:技术管理者自己,是最被忽视的"项目" 一、5 个台阶的全局视角:管理半径的 5 次跃迁 二、第 1 台阶:从"做事者"到"管事者"——管理半径的起点 2.1 这个台阶的本质:交…

2026/7/14 6:07:20 阅读更多 →
初识C语言 | 第5篇

初识C语言 | 第5篇

文章目录 链表什么是链表?链表 vs 数组(核心区别)为什么要用链表? 关键字typedefvoid 关键字笔记核心含义三种基本用法常见禁忌 static核心总思想 浮点数舍入指针内存的核心作用地址的概念内存容量与寻址能力关键总结指针变量的大…

2026/7/14 6:03:19 阅读更多 →

最新新闻

3步掌握RWTS-PDFwriter:macOS用户的终极PDF打印解决方案

3步掌握RWTS-PDFwriter:macOS用户的终极PDF打印解决方案

3步掌握RWTS-PDFwriter:macOS用户的终极PDF打印解决方案 【免费下载链接】RWTS-PDFwriter An OSX print to pdf-file printer driver 项目地址: https://gitcode.com/gh_mirrors/rw/RWTS-PDFwriter 还在为macOS上缺少简单高效的PDF打印驱动而烦恼吗&#xff…

2026/7/14 7:49:52 阅读更多 →
CentOS yum源配置与优化全指南

CentOS yum源配置与优化全指南

1. CentOS yum源配置基础认知在CentOS系统中,yum(Yellowdog Updater Modified)是RPM包管理器的前端工具,它通过自动解决依赖关系来简化软件安装过程。而yum源则是包含大量RPM软件包的软件仓库,系统通过读取这些仓库的元…

2026/7/14 7:47:52 阅读更多 →
光伏发电GHI估算的无监督学习方法与实践

光伏发电GHI估算的无监督学习方法与实践

1. 光伏功率测量与全局水平辐照度估算的背景与挑战在光伏发电系统中,准确估算全局水平辐照度(GHI)是评估系统性能和预测发电量的关键环节。传统方法通常依赖地面气象站或卫星遥感数据,但这些方法存在成本高、空间分辨率有限等问题…

2026/7/14 7:45:52 阅读更多 →
micro-analytics-cli API完全手册:掌握数据追踪与查询的核心方法

micro-analytics-cli API完全手册:掌握数据追踪与查询的核心方法

micro-analytics-cli API完全手册:掌握数据追踪与查询的核心方法 【免费下载链接】micro-analytics-cli Public analytics as a Node.js microservice. No sysadmin experience required! 📈 项目地址: https://gitcode.com/gh_mirrors/mi/micro-analy…

2026/7/14 7:45:52 阅读更多 →
Unity渐变纹理Shader:从原理到实战,打造高级UI与特效视觉

Unity渐变纹理Shader:从原理到实战,打造高级UI与特效视觉

1. 项目概述:为什么渐变纹理是UI与特效的“氛围感”利器在游戏和交互应用的视觉呈现中,我们常常陷入一种“非黑即白”的困境:一个按钮要么是纯色,要么是静态贴图;一个特效要么是生硬的边缘,要么是突兀的闪烁…

2026/7/14 7:45:52 阅读更多 →
AI绘画角色一致性生成:从Stable Diffusion基础到实战应用

AI绘画角色一致性生成:从Stable Diffusion基础到实战应用

最近在AI绘画圈子里,一个名为"少女与百合"的项目突然火了起来。不少开发者发现,这个看似简单的AI美女生成项目,实际上隐藏着不少值得关注的技术细节。如果你正在寻找一个既能快速上手,又具备一定技术深度的AI绘画实践案…

2026/7/14 7:45:52 阅读更多 →

日新闻

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:01:13 阅读更多 →
Perplexity vs ChatGPT vs Claude:实测127组复杂查询任务,谁才是真正可靠的“事实型AI助手”?

Perplexity vs ChatGPT vs Claude:实测127组复杂查询任务,谁才是真正可靠的“事实型AI助手”?

更多请点击: https://codechina.net 第一章:Perplexity 怎么用 Perplexity 是衡量语言模型预测能力的核心指标,数值越低表示模型对文本序列的不确定性越小、预测越精准。它本质上是交叉熵损失的指数形式,计算公式为:…

2026/7/14 0:01:13 阅读更多 →
全球首发!五一视界定制物理AI卫星ECS-1剑指万亿赛道

全球首发!五一视界定制物理AI卫星ECS-1剑指万亿赛道

五一视界发布公告,近日,公司与环天智慧科技股份有限公司(“环天智慧”)正式达成空天领域战略合作。环天智慧是国内领先、聚焦天基对地观测遥感卫星总体研制与在轨运营的商业航天企业,同时也是西南地区规模最大、具备全自主可控遥感卫星星座建…

2026/7/14 0:03:13 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/13 4:38:36 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/13 4:38:38 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/14 7:15:24 阅读更多 →

月新闻