正则表达式入门:从匹配到替换的第一课
正则表达式(Regular Expression,简称正则)是用来描述字符串模式的一套规则。学会它,就能用一行代码完成查找、校验和替换这类重复工作,是每个开发者都值得掌握的基本功。
一、第一个正则:从匹配开始
假设要在一段文字里找出所有以 138 开头的 11 位手机号码,逐个比对既慢又容易出错。正则的做法是先写出模式,再让程序按模式去找。
在 Python 里可以这样写:
import re
text = "联系方式:13812345678,备用:13987654321"
print(re.findall(r"138\d{10}", text))
这里 138 是普通字符,\d 表示任意一个数字,{10} 表示前面的内容重复 10 次。运行后会得到 ['13812345678'],这就是正则最直观的用法:描述形状,让机器去匹配。
二、常用元字符,一张表记住
.:任意一个字符(换行除外)\d:数字,相当于[0-9]\w:字母、数字或下划线\s:空白字符,包括空格和换行^:字符串开头;$:字符串结尾[abc]:方括号内的任意一个字符[^abc]:不在方括号内的任意一个字符
把它们组合起来,^\d{6}$ 就是“恰好 6 位数字”,常用来校验短信验证码;[a-z]+ 则表示“一个或多个小写字母”。
三、量词:控制重复次数
*:零次或多次+:一次或多次?:零次或一次{n}:恰好 n 次{n,m}:n 到 m 次
例如 colou?r 既能匹配 color,也能匹配 colour;\d{4}-\d{2}-\d{2} 可以匹配 2026-11-06 这样的日期。需要注意,* 和 + 默认是贪婪的,会尽量多地匹配,必要时可以在后面加 ? 改为非贪婪,例如 <.*?>。
四、分组与替换:不只是查找
圆括号可以把一部分模式括起来分组,替换时用编号引用。下面这个例子把日期从 2026/11/06 改写成 2026-11-06:
import re
date = "2026/11/06"
print(re.sub(r"(\d{4})/(\d{2})/(\d{2})", r"\1-\2-\3", date))
\1、\2、\3 分别对应三个分组的内容。掌握分组之后,批量整理日志、统一文件名格式都会变得很简单。
五、新手最容易踩的三个坑
第一,忘记转义特殊字符。想匹配真正的点号要写 \.,而不是 .。第二,在 Python 里优先使用原始字符串 r"...",避免反斜杠被先转义一次。第三,不要用正则去解析结构复杂的嵌套文本,例如完整的 HTML,正则适合处理有固定形状的片段,而不是通用解析器。
六、给自己的小练习
试着写三个正则:匹配以字母开头、长度 6 到 16 位的用户名;从一句话里提取所有邮箱地址;把文本里的多个连续空格压缩成一个。写完后用几行 Python 验证,错了就改,改完再测,十分钟就能建立起手感。
正则的语法并不多,关键是多练。从今天的第一个模式开始,下次再遇到“找一类字符串”的任务时,先想想能不能用一行正则解决。
- 点赞
- 收藏
- 关注作者
评论(0)