Python 正则表达式实战总结

一、re 模块核心函数(必掌握)

Python 正则核心就 5 个函数,记住基本就能搞定 90% 场景:

表格

函数 作用
re.match() 开头匹配,匹配不到返回 None
re.search() 全局搜索,找到第一个匹配项
re.findall() 全局查找,返回所有匹配结果列表(最常用)
re.sub() 替换匹配到的内容(清洗文本神器)
re.split() 根据正则分割字符串

基础导入

复制代码
import re

二、正则基础语法速查表

1. 常用元字符

  • .:匹配任意单个字符(除换行)
  • ^:开头匹配
  • $:结尾匹配
  • *:0 次或多次
  • +:1 次或多次
  • ?:0 次或 1 次
  • {n}:恰好 n 次;{n,}:至少 n 次;{n,m}:n~m 次
  • []:字符集,匹配括号内任意一个字符
  • ():分组提取
  • |:或

2. 预定义字符类

  • \d:数字 0-9
  • \D:非数字
  • \w:字母、数字、下划线
  • \W:非单词字符
  • \s:空白(空格、制表符、换行)
  • \S:非空白

注意:Python 字符串 \ 需要转义,推荐使用原始字符串 r"正则表达式",避免转义问题。

三、实战案例(直接复制运行)

案例 1:匹配手机号

规则:11 位,1 开头,第二位 3/4/5/6/7/8/9

python 复制代码
text = "我的手机号:13812345678,备用:19987654321,错误号码:123456789"
pattern = r"1[3-9]\d{9}"
res = re.findall(pattern, text)
print(res)
# 输出:['13812345678', '19987654321']

案例 2:提取邮箱

python 复制代码
text = "联系我:test@163.com,admin@qq.com,错误邮箱abc@"
pattern = r"\w+@\w+\.\w+"
res = re.findall(pattern, text)
print(res)
# 输出:['test@163.com', 'admin@qq.com']

案例 3:分组提取(精准取值)

提取 姓名-年龄 格式中的姓名和年龄

python 复制代码
text = "张三-22,李四-25,王五-20"
pattern = r"(\w+)-(\d+)"
res = re.findall(pattern, text)
print(res)
# 输出:[('张三', '22'), ('李四', '25'), ('王五', '20')]

案例 4:文本清洗替换(去掉特殊符号、多余空格)

python 复制代码
text = "Python@正则#实战!   干货总结123"
# 去掉非中文、字母、数字
res = re.sub(r"[^\u4e00-\u9fa5a-zA-Z0-9\s]", "", text)
# 多个空格替换为单个空格
res = re.sub(r"\s+", " ", res)
print(res)
# 输出:Python正则实战 干货总结123

案例 5:贪婪匹配 vs 非贪婪匹配(高频坑)

  • 贪婪:.* 尽可能多匹配
  • 非贪婪:.*? 尽可能少匹配
python 复制代码
text = "<div>标题1</div><div>标题2</div>"
# 贪婪
print(re.findall(r"<div>.*</div>", text))
# 输出:['<div>标题1</div><div>标题2</div>']

# 非贪婪(爬虫必用)
print(re.findall(r"<div>.*?</div>", text))
# 输出:['<div>标题1</div>', '<div>标题2</div>']

案例 6:匹配中文

python 复制代码
text = "Hello 世界 Python 正则"
pattern = r"[\u4e00-\u9fa5]+"
res = re.findall(pattern, text)
print(res)
# 输出:['世界']

案例 7:split 分割复杂字符串

python 复制代码
text = "张三,22;李四|25 王五 20"
# 按逗号、分号、竖线、空格分割
res = re.split(r"[,;| ]+", text)
print(res)
# 输出:['张三', '22', '李四', '25', '王五', '20']

四、正则修饰符(flags)

常用 3 个,可组合使用:

  • re.I:忽略大小写
  • re.S. 匹配换行符(多行文本、爬虫必备)
  • re.M:多行模式,^$ 匹配每行开头结尾

示例:

python 复制代码
text = "Python\npython"
res = re.findall(r"python", text, re.I)
print(res)
# 输出:['Python', 'python']

五、高频避坑总结(面试 & 实战必看)

  1. 一定要用原始字符串 r"" ,否则 \d 会被当成转义字符
  2. 爬虫提取标签内容,优先非贪婪 .*?,否则匹配整段
  3. match 只匹配开头,全局查找用 search / findall
  4. 中文正则用 [\u4e00-\u9fa5]
  5. 空格、换行、制表符统一用 \s
  6. 复杂正则可分步写,不要一次性写超长表达式,难调试
相关推荐
yoothey7 小时前
MySQL事务机制解析 - 面试高分知识点
数据库·mysql·面试
JOJO数据科学7 小时前
JupyterLab Electron 鸿蒙 PC 适配全记录:从 Python 原生崩溃到 node-static 本地工作台
python·electron·harmonyos
xufengzhu7 小时前
第三方 Python 库 redis-py + hiredis 的使用
开发语言·redis·python
Lkstar7 小时前
万字长文Query改写与多路召回实战|从HyDE到RRF融合,召回率提升22%的完整方案
数据库·人工智能·llm
IT新视界7 小时前
星环科技ArgoDB:基于一体化架构构建数据全生命周期安全底座
数据库·科技·安全·架构
峥无8 小时前
MySQL DML 操作(CRUD)总结
数据库·mysql
llxxyy卢8 小时前
polar夏季赛部分题目
开发语言·python
闵孚龙8 小时前
PyTorch 系列 之 nn.Module:所有模型的骨架
人工智能·pytorch·python
AI玫瑰助手8 小时前
Python模块:from...import...导入指定内容
开发语言·python·信息可视化
小森林之主8 小时前
Python re 模块速查:从实战对比中掌握正则表达式
python·正则表达式·性能测试·re模块·编程实战