《Python 高级语法双雄:正则表达式与迭代器/生成器全解析》
·
Python 高级语法双雄:正则表达式与迭代器/生成器全解析
一、正则表达式:给字符串装上“搜索雷达”
1️⃣ 为什么要学?
日常开发经常遇到“从一堆文字里挑邮箱、手机号、日期”的需求。正则表达式就是一把“模糊搜索”的瑞士军刀,跨语言通用,Python 里通过内置的 re 模块即可调用。
2️⃣ 核心功能
- 数据验证:表单里的手机号是否合法?
- 数据检索:从网页源码里批量抓取图片链接。
- 数据隐藏:把身份证中间 8 位替换成星号。
- 数据过滤:论坛敏感词一键屏蔽。
3️⃣ 三步走使用流程
- 导入模块:
import re - 选择方法:
re.match从开头比对;re.search全文找首个命中;re.findall返回所有匹配的列表;re.sub直接替换命中内容。
- 提取结果:成功返回“匹配对象”,用
.group()取文本,失败返回None。
4️⃣ 符号速记(背下来就能干活)
| 符号 | 含义 |
|---|---|
. |
任意单个字符(除换行) |
\d |
数字 0-9 |
\w |
字母、数字、下划线、汉字 |
^ |
开头锚点 |
$ |
结尾锚点 |
* |
前一字符 0 次或多次 |
+ |
前一字符 1 次或多次 |
{m,n} |
前一字符出现 m 到 n 次 |
组合用法:
- 匹配 11 位手机号:
^\d{11}$ - 匹配邮箱前缀+域名:
\w+@(qq|163|126)\.com
5️⃣ 进阶概念
- 分组:用圆括号
()把关心的部分圈起来,后续通过.group(1)、.group(2)提取。 - 反向引用:
\1、\2复用前面捕获的文本,实现“连续四位相同数字”这类模式。 - 修饰符:
re.I忽略大小写,re.S让.跨行匹配,常用于网页源码。
二、迭代器 & 生成器:让 Python “按需生产”
1️⃣ 迭代器:最老实的搬运工
- 定义:实现
__iter__()与__next__()的对象。 - 特点:一次性、只读、只能从头到尾走一遍。
- 场景:当你需要完全控制遍历过程,或想隐藏底层数据结构时,手写迭代器最合适。
2️⃣ 生成器:语法糖里的黑科技
- 定义:在函数里写
yield,立刻变“惰性工厂”。 - 创建方式:
① 生成器推导式:把列表推导式的[]换成();
②yield函数:运行到yield就暂停,下一次从断点继续。 - 特点:
- 自动保存状态,无需手动
__next__(); - 按需生成,内存占用极低;
- 可与
for循环或next()无缝配合。
- 自动保存状态,无需手动
3️⃣ 迭代器 vs 生成器快速对照
| 维度 | 迭代器 | 生成器 |
|---|---|---|
| 实现 | 手写双方法 | 函数里写 yield |
| 代码量 | 较多 | 极短 |
| 内存 | 取决于实现 | 自动优化 |
| 适用 | 高度定制流程 | 快速惰性序列 |
4️⃣ 实战思维
- 大数据文件:用生成器逐行产出,内存恒定在几十 MB。
- AI 数据加载器:每调用一次生成器返回一个 batch,训练时再按需取,避免一次性把 10 GB 数据塞进显存。
- 无限序列:斐波那契、自然数流,用生成器可以无限产出而不会爆内存。
三、一句话总结
- 正则表达式:让字符串搜索像 SQL 一样高效。
- 迭代器 / 生成器:用“懒”换取“省”,把大数据或无限序列拆成一次只拿一小口的自助餐。
掌握这两件武器,你就拥有了 Python 高级语法里最锋利的一对“搜索+节流”双刀。
更多推荐
所有评论(0)