学Python正则表达式应先掌握re.search、re.findall、re.sub、re.split四个核心方法及\d、\w、.、+*?{}、^$\b、()、\等基础语法,再通过实战练习巩固。

学 Python 正则表达式,核心是理解 re 模块的常用方法 + 掌握基础语法逻辑,而不是死记所有符号。先会用、再精进,边写边调最有效。
从最常用的 4 个方法开始
不用一上来就啃文档,这四个函数覆盖 90% 的日常需求:
-
re.search(pattern, string):找第一个匹配项,返回
Match对象(有匹配)或None(没找到),适合“是否存在”“提取关键字段” - re.findall(pattern, string):返回所有匹配内容的列表,字符串或元组(含分组时),最常用
- re.sub(pattern, repl, string):替换匹配内容,比如清洗空格、脱敏手机号、统一日期格式
-
re.split(pattern, string):按正则切分字符串,比
str.split()更灵活(例如按“多个空格/制表符/换行”一起切)
先掌握 5 类基础语法,够你起步
别被“元字符大全”吓住,优先吃透这些高频组合:
- \d 表示数字,\w 表示字母/数字/下划线,. 表示任意单个字符(除换行)
-
数量控制:+(1次及以上)、*(0次及以上)、?(0或1次)、{2,5}(2到5次),例如
\d{3}-\d{4}-\d{4}匹配常见手机号格式 -
边界锚点:^ 开头、$ 结尾、\b 单词边界,比如
r'\bcat\b'只匹配独立单词 “cat”,不匹配 “scatter” -
分组 () 和捕获:括号内内容会被单独提取出来,
re.findall(r'(\d{4})-(\d{2})-(\d{2})', '2023-05-12')返回[('2023', '05', '12')] -
转义:普通字符前加 \ 表示字面意思,比如 \. 匹配小数点,\( 匹配左括号;但注意 Python 字符串本身也转义,推荐一律用原始字符串
r'...'
实战小练习:3 分钟上手
打开 Python 解释器,逐行敲一遍,观察输出:
立即学习“Python免费学习笔记(深入)”;
import re
text = "订单号:ORD2023001,金额:¥199.99,日期:2023-08-20"
<h1>提取订单号(字母+数字组合)</h1><p>re.search(r'ORD\d+', text).group() # → 'ORD2023001'</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/1228" title="NameGPT名称生成器"><img
src="https://img.php.cn/upload/ai_manual/000/000/000/175680125954711.png" alt="NameGPT名称生成器" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/1228" title="NameGPT名称生成器">NameGPT名称生成器</a>
<p>免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。</p>
</div>
<a href="/ai/1228" title="NameGPT名称生成器" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><h1>提取所有数字(含小数)</h1><p>re.findall(r'\d+.\d+|\d+', text) # → ['2023001', '199.99', '2023', '08', '20']</p><h1>替换日期为中文格式</h1><p>re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\1年\2月\3日', text) </p><h1>→ '订单号:ORD2023001,金额:¥199.99,日期:2023年08月20日'</h1><p>避坑提醒:新手常卡在这几点
不是语法难,而是细节容易忽略:
-
忘记加 r 前缀:写
'\n'是换行符,r'\n'才表示反斜杠+n两个字符 -
点号 . 默认不匹配换行:需要跨行匹配时,加
re.DOTALL标志,如re.findall(r'a.b', s, re.DOTALL) -
贪婪 vs 非贪婪:
.*会尽可能多匹配,想“最小匹配”就加 ?,比如href="(.*?)"提取第一个引号内的链接 -
中文匹配要小心编码:确保字符串是 str 类型(不是 bytes),正则中可直接写中文,如
r'订单号:(\w+)'
不复杂但容易忽略,动手写三五个例子,比看十页教程管用。等你习惯用 re.search 和 re.findall 解决实际问题,再系统补语法细节也不迟。









