Python 高级语法双雄:正则表达式与迭代器/生成器全解析

一、正则表达式:给字符串装上“搜索雷达”

1️⃣ 为什么要学?

日常开发经常遇到“从一堆文字里挑邮箱、手机号、日期”的需求。正则表达式就是一把“模糊搜索”的瑞士军刀,跨语言通用,Python 里通过内置的 re 模块即可调用。

2️⃣ 核心功能

  • 数据验证:表单里的手机号是否合法?
  • 数据检索:从网页源码里批量抓取图片链接。
  • 数据隐藏:把身份证中间 8 位替换成星号。
  • 数据过滤:论坛敏感词一键屏蔽。

3️⃣ 三步走使用流程

  1. 导入模块import re
  2. 选择方法
    • re.match 从开头比对;
    • re.search 全文找首个命中;
    • re.findall 返回所有匹配的列表;
    • re.sub 直接替换命中内容。
  3. 提取结果:成功返回“匹配对象”,用 .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 高级语法里最锋利的一对“搜索+节流”双刀。


Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐