Skip to content

正则

本节目标

学完这一节后,你应该能做到:

  • 理解正则表达式的用途
  • 看懂最常见的元字符
  • 会用 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. 一上来就写太复杂的表达式

学正则最忌讳“没理解就硬背”。

十二、本节练习

  1. 匹配一段文本中的手机号
  2. 匹配一段文本中的邮箱格式
  3. 把一段文本中的数字全部提取出来
  4. 把一段文本里的手机号替换成星号

十三、本节小结

学正则时不要急着追求复杂,而要先把这几个动作练熟:

  • 匹配
  • 查找
  • 替换
  • 分组

这四个动作熟了,后面很多正则场景你就能自己慢慢写出来。

Built with VitePress.