Python正则表达式完整教程:从入门到实战,解决文本匹配所有难题

发布时间:2026/7/8 3:27:22

Python正则表达式完整教程:从入门到实战,解决文本匹配所有难题
一、前言在日常Python开发、日志解析、爬虫、数据清洗、大模型文本提取场景中字符串处理是高频需求。普通str内置方法split/replace/find只能处理简单固定文本面对不规则、分段、跨多行、结构化混杂文本时完全无力。正则表达式Regular Expression简称Regex是一套通用文本匹配规则Python内置re模块原生支持正则可实现格式校验、内容提取、批量替换、文本分割四大核心能力。本文覆盖完整学习链路基础语法→re模块六大核心API→标志位重点解决换行匹配坑→分组捕获→贪婪/非贪婪→实战案例→高频踩坑总结全部代码可直接复制运行。二、前置准备re模块与原始字符串r1. 导入模块Python标准库自带re无需额外安装importre2. 必须使用原始字符串 r正则正则大量使用\d、\s、\.等转义符普通字符串\\d需要双重反斜杠极易出错原始字符串r会忽略Python转义推荐全程使用。# 标准写法patternr\d# 不推荐冗余易出错pattern\\d三、正则核心基础语法3.1 通用字符匹配元字符符号含义示例.匹配任意单个字符默认不匹配换行\nra.匹配ab、a9\d数字 0-9r\d{11}匹配手机号\D非数字匹配字母、符号\w字母/数字/下划线 a-z A-Z 0-9 _匹配变量名\W非字母数字下划线匹配空格、逗号\s空白字符空格、制表符、换行匹配任意空白\S非空白字符匹配可见字符[]字符集匹配括号内任意一个[0-9a-z]小写数字[^]取反匹配不在括号内字符[^0-9]匹配非数字3.2 量词控制匹配重复次数符号含义*前面字符匹配 0次或多次前面字符匹配 1次或多次至少1次?前面字符匹配 0次或1次{m}精确匹配m次{m,n}匹配m~n次示例r\d{6}匹配6位数字验证码。3.3 边界锚点限定匹配位置符号作用^字符串开头$字符串结尾\b单词边界字母/数字与符号间隔示例r^1[3-9]\d{9}$完整校验11位手机号。3.4 分组与或逻辑()分组捕获匹配内容单独提取子片段|或匹配左右任意一个表达式# 匹配 http 或 httpsrhttps?://# 分组提取年月日r(\d{4})-(\d{2})-(\d{2})四、re模块六大核心API详解4.1 re.match()仅从字符串开头匹配只校验文本最开头是否符合规则中间匹配不到返回Match对象/None。textabc123defresre.match(r\d,text)print(res)# None开头不是数字res2re.match(rabc,text)print(res2.group())# abc4.2 re.search()全局搜索第一个匹配项扫描整个字符串返回第一个符合规则的内容最常用单条提取场景。text订单号ORD20260707金额999resre.search(r\d,text)print(res.group())# 202607074.3 re.findall()提取所有匹配返回列表高频找出全部匹配子串无匹配返回空列表适合批量提取。text123 456 789numsre.findall(r\d,text)print(nums)# [123, 456, 789]你之前提取多行JSON代码块使用的就是该方法。4.4 re.sub()批量替换文本语法re.sub(正则, 替换内容, 原文本, count0)count0替换全部。text价格100优惠50newre.sub(r\d,***,text)print(new)# 价格***优惠***4.5 re.split()按正则分割字符串比str.split灵活支持按多种符号分割。text苹果,香蕉;橘子 葡萄partsre.split(r[,; ],text)print(parts)# [苹果, 香蕉, 橘子, 葡萄]4.6 re.compile()预编译正则高复用场景优化如果一段正则需要循环调用上千次提前编译提升性能。# 预编译patternre.compile(r\d{11})text_list[13800138000,test123,13912345678]fortintext_list:print(pattern.search(t))五、Match对象取值group()分组捕获当正则存在()分组时可单独提取分组内容group()/group(0)完整匹配内容group(1)第一个括号分组groups()所有分组组成元组text2026-07-07resre.search(r(\d{4})-(\d{2})-(\d{2}),text)print(res.group())# 2026-07-07print(res.group(1))# 2026print(res.groups())# (2026, 07, 07)六、正则标志位flags重点解决换行匹配痛点re.match/search/findall都支持flags参数多个标志用|拼接。6.1 re.S / re.DOTALL重中之重默认.不能匹配换行符\n开启后.匹配所有字符包含换行解决跨多行文本提取空白问题。md json[{name:测试}]“”不加re.S匹配为空res re.findall(rjson(.?), md)print(res) # []开启跨行匹配res re.findall(rjson(.?), md, flagsre.S)print(res[0].strip()) # 完整取出JSON多行内容替代方案无需标志位[\s\S] 等价所有字符 python res re.findall(rjson([\s\S]?), md)6.2 re.M / re.MULTILINE 多行锚点模式仅修改^和$让其匹配每一行开头/结尾不改变.匹配规则无法解决跨行提取。text第一行\n第二行\n第三行# 匹配所有以“第”开头的行resre.findall(r^第.*,text,re.M)print(res)# [第一行, 第二行, 第三行]6.3 re.I / re.IGNORECASE 忽略大小写匹配textApple APPLE appleresre.findall(rapple,text,re.I)print(res)# [Apple, APPLE, apple]七、贪婪匹配与非贪婪匹配开发高频坑7.1 贪婪默认*、、{m,n}默认尽可能匹配最长文本容易匹配范围过大。textdiv内容1/divdiv内容2/div# 贪婪一次性匹配到最后一个/divresre.findall(rdiv(.)/div,text)print(res)# [内容1/divdiv内容2]7.2 非贪婪加?量词后增加?匹配最短符合内容多标签/多代码块场景必备。resre.findall(rdiv(.?)/div,text)print(res)# [内容1, 内容2]八、实战业务案例可直接复用案例1校验手机号完整格式defcheck_phone(phone):patternr^1[3-9]\d{9}$ifre.match(pattern,phone):returnTruereturnFalseprint(check_phone(13812345678))# Trueprint(check_phone(12345678900))# False案例2提取Markdown所有代码块md_text# 测试文档pythondefhello():print(hello){key:value}“”提取代码语言代码内容blocks re.findall(r(\w)\n([\s\S]?)“, md_text)for lang, code in blocks:print(f语言{lang}\n代码\n{code.strip()}\n—”)### 案例3清洗日志提取所有数字 python log 2026-07-07 接口耗时 128ms请求ID 987654错误码 0 nums re.findall(r\d, log) print(nums) # [2026,07,07,128,987654,0]案例4批量隐藏身份证中间数字text张三身份证500101199901011234李四510202200002024567new_textre.sub(r(\d{6})\d{8}(\d{4}),r\1********\2,text)print(new_text)# 张三身份证500101********1234李四510202********4567九、常见踩坑总结跨行文本匹配返回空列表原因.默认不匹配换行解决方案加re.S或替换[\s\S]?。正则包含\被转义失效解决方案全部使用原始字符串r表达式。多个标签/代码块一次性匹配到底原因贪婪匹配解决方案量词后加?改为非贪婪。match只能匹配开头误以为全局搜索区分match从头匹配search全局找第一个findall提取全部。混淆re.M和re.Sre.M只改变行首尾锚点不能解决.无法跨换行问题。匹配结果为空列表直接取res[0]报错规范写法先判断if res:再取值增加容错。十、总结Python通过内置re模块实现正则原始字符串r是规范写法六大核心函数match/search/findall/sub/split/compile按业务场景选用跨行文本提取必用re.S标志位解决.不识别换行的核心痛点多段混杂文本必须使用非贪婪?避免匹配范围溢出分组()配合group()可精准提取结构化片段适合日志、代码块、证件解析正则是文本处理利器爬虫、数据清洗、接口文本过滤、格式校验场景均不可替代。

相关新闻

还在为 API 调用踩坑?这款中转站帮你省成本、提效率、保稳定

还在为 API 调用踩坑?这款中转站帮你省成本、提效率、保稳定

2026/7/8 3:27:22

开发者效率工具分享|跨境接口提速|多接口一站式管理 接口加速・链路优化・效率提升 搞定海外 API 调用卡顿、超时、延迟高的难题 告别多接口重复对接,一站式调用更省心 7月6日(2)

学术写作创新突破!2026智能AI论文写作工具推荐指南

学术写作创新突破!2026智能AI论文写作工具推荐指南

2026/7/8 3:17:22

2026 年 AI 论文写作工具已进入全流程闭环 学术合规时代,千笔 AI(综合评分 99 分)中文学术场景标杆;Grammarly Academic与Elicit为英文论文写作首选;按需求匹配度 - 数据可信度 - 成本承受力三维模型选型,…

G2810,G3810,MG3680,MG3640S,G1810,MP288,G2800,G5080,TS3380,G3800,ix6780错误代码:5B00,5B02,5B04,1700,P07维修

G2810,G3810,MG3680,MG3640S,G1810,MP288,G2800,G5080,TS3380,G3800,ix6780错误代码:5B00,5B02,5B04,1700,P07维修

2026/7/8 3:17:22

蓝凑云:点这里下载 密码:00 百度云:点这里下载 备用:wwaxr.lanzouw.com/b0xxejeaj 密码:00 常见型号如下: G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1510、G1520、G1…

Screenshot to Code 多模型对比:GPT-4V vs Claude vs Gemini 生成代码质量实测

Screenshot to Code 多模型对比:GPT-4V vs Claude vs Gemini 生成代码质量实测

2026/7/8 4:57:41

Screenshot to Code 多模型对比:GPT-4V vs Claude vs Gemini 生成代码质量实测在当今快速发展的前端开发领域,AI辅助工具正在彻底改变设计师和开发者将视觉设计转化为可执行代码的方式。其中,截图转代码技术因其能够显著提升开发效率而备受关…

VL02N PGI 报错:定义科目 46868688 的成本要素类别(成本控制范围 AB00)

VL02N PGI 报错:定义科目 46868688 的成本要素类别(成本控制范围 AB00)

2026/7/8 4:57:41

该科目为Demo系统重新创建的主营业务成本科目参考之前的系统创建了这个科目但是VL02N时报错了调查了很久AI一直说KA02,可是KA02就是FS00里面没有成本要素类别最终原来是这里要改成最终解决那么问题来了,原来项目的这个科目为啥选的 N 营业外收支 而不是 …

iPaaS与新兴技术的融合(1)| iPaaS为什么从“数据管道”变成了“AI的手和脚”?

iPaaS与新兴技术的融合(1)| iPaaS为什么从“数据管道”变成了“AI的手和脚”?

2026/7/8 4:57:41

2024年,一家中型电商公司在接入AI Agent处理退换货时遇到了尴尬:大模型可以完美理解客户邮件中的愤怒和诉求,生成体贴的回复,甚至计算出最优补偿金额,但最后却卡在“无法真正登录ERP系统创建退货单、释放库存并触发退款…

林业物联网开源方案|树木胸径监测仪配套轻量级Java SDK(MIT开源)

林业物联网开源方案|树木胸径监测仪配套轻量级Java SDK(MIT开源)

2026/7/8 4:57:41

项目简介林业物联网、树木胸径监测、树径监测Java SDK、林业数据对接SDK是当下林业数字化、碳汇监测、国储林信息化建设高频技术需求。ForestTreeNetClient(forest-tree-net-client)是森林树径监测平台官方开源Java SDK,基于MIT开源协议发布&…

2026年IE/Chrome/Edge兼容测试选型指南:新旧浏览器内核差异大、后台系统渲染崩溃如何解决

2026年IE/Chrome/Edge兼容测试选型指南:新旧浏览器内核差异大、后台系统渲染崩溃如何解决

2026/7/8 4:57:41

IE、Chrome、Edge 共存带来大量兼容难题 目前国内互联网市场存在两类完全不同的网页产品生态,形成 IE、Chrome、Edge 三款浏览器长期共存的局面:面向政企、事业单位、传统制造业的内部 OA、ERP、财务、审批后台系统,长期依赖 IE 浏览器运行&…

企业AI生产力为什么需要一个网关?大模型API距离可控还有多远?【魔芋网关MAI Gateway】

企业AI生产力为什么需要一个网关?大模型API距离可控还有多远?【魔芋网关MAI Gateway】

2026/7/8 4:47:40

从个人玩具到企业生产力,中间差的不只是模型,还有一个网关。 去年底,我一个朋友老张,某中型SaaS公司的技术总监,兴冲冲地跟我讲他们公司"AI化"的成果:研发团队全员上了AI编码助手,市场…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/8 0:44:47

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/7 4:34:17

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/7 13:20:59

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

Qwen Code+Obsidian构建可执行的AI时代认知操作系统

Qwen Code+Obsidian构建可执行的AI时代认知操作系统

2026/7/8 0:07:15

1. 项目概述:这不是又一个笔记软件教程,而是一套可复用的“认知操作系统”搭建逻辑你有没有试过,在读完Andrej Karpathy那篇著名的《Software 2.0》之后,满脑子都是“神经网络即代码”的震撼,但合上网页,打…

校园服饰细分赛道测算程序,学生平价国风,机能穿搭市场规模预估。

校园服饰细分赛道测算程序,学生平价国风,机能穿搭市场规模预估。

2026/7/8 0:07:15

校园服饰细分赛道测算程序(Python)——学生平价国风 & 机能穿搭市场规模预估(TAM / SAM / SOM)一、实际应用场景描述(真实业务抽象)在《时尚产业与品牌创新》课程中,细分市场切入&#xff0…

Visual C++运行库完整解决方案:告别软件兼容性问题

Visual C++运行库完整解决方案:告别软件兼容性问题

2026/7/8 0:07:15

Visual C运行库完整解决方案:告别软件兼容性问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾为打开游戏时弹出的"DLL缺失"错误…