正则
本节目标
学完这一节后,你应该能做到:
- 理解正则表达式的用途
- 看懂最常见的元字符
- 会用
re模块做匹配、查找、替换 - 理解分组匹配
- 知道贪婪和非贪婪的基本区别
先修知识
建议你已经掌握:
- 字符串
- 函数
- 模块导入
一、正则表达式是什么
正则表达式可以理解成:
“一套用来描述文本规则的写法。”
例如:
- 匹配手机号
- 提取日期
- 提取邮箱
- 替换敏感信息
二、为什么要学正则
因为后面你做这些事时会经常遇到它:
- 爬虫抓网页
- 清洗文本数据
- 处理日志
- 做表单校验
三、最常见的元字符
先记最常见的一批:
.:任意单个字符\d:数字\w:字母、数字、下划线\s:空白字符^:开头$:结尾
四、次数匹配
*:前面的内容重复 0 次或多次+:前面的内容重复 1 次或多次?:前面的内容重复 0 次或 1 次{n}:重复 n 次{m,n}:重复 m 到 n 次
例如:
python
\d{11}表示“连续 11 个数字”。
五、Python 中怎么用正则
最常见的是 re 模块。
找出手机号
python
import re
text = "我的手机号是 13812345678"
result = re.findall(r"\d{11}", text)
print(result)输出:
text
['13812345678']六、判断格式
例如判断一个 QQ 号是否合法:
python
import re
qq = "123456"
is_ok = bool(re.fullmatch(r"\d{5,11}", qq))
print(is_ok)输出:
text
True七、查找文本中的数字
python
import re
text = "张三 88分,李四 92分,王五 76分"
print(re.findall(r"\d+", text))输出:
text
['88', '92', '76']八、替换文本
python
import re
text = "联系方式:13812345678"
result = re.sub(r"\d{11}", "***********", text)
print(result)输出:
text
联系方式:***********九、分组匹配
有时候你不只是想匹配成功,而是想把匹配结果拆出来单独使用。
python
import re
text = "今天是 2026-04-24"
match = re.search(r"(\d{4})-(\d{2})-(\d{2})", text)
print(match.group(1))
print(match.group(2))
print(match.group(3))输出:
text
2026
04
24十、贪婪模式与非贪婪模式
默认情况下,正则会尽量多匹配,这叫贪婪模式。
如果你希望它尽量少匹配,就要在量词后面加 ?。
这个知识点在处理 HTML、JS 文本时很常见。
十一、常见错误
1. 忘记加原始字符串前缀 r
例如:
python
r"\d+"写成原始字符串通常更安全,不容易被转义规则影响。
2. 一上来就写太复杂的表达式
学正则最忌讳“没理解就硬背”。
十二、本节练习
- 匹配一段文本中的手机号
- 匹配一段文本中的邮箱格式
- 把一段文本中的数字全部提取出来
- 把一段文本里的手机号替换成星号
十三、本节小结
学正则时不要急着追求复杂,而要先把这几个动作练熟:
- 匹配
- 查找
- 替换
- 分组
这四个动作熟了,后面很多正则场景你就能自己慢慢写出来。