是不是有很多零基础的朋友一听到 “正则表达式” 就头疼?看着那些乱七八糟的符号 “\d+@\w+.\w+” 完全摸不着头脑,学了半天还是不会用在实际场景里;想验证个手机号、提取段文本里的邮箱,搜了教程抄代码,改个符号就报错。别愁,兔子哥当初学正则也是这样,光是搞懂 “.*?” 和 “.+?” 的区别就卡了两天,后来发现用对方法,正则其实没那么难。今天就带零基础的朋友从语法符号到实战案例,一步步入门,新手跟着学,快速掌握正则表达式!
一、先搞懂:正则表达式到底是啥?用在哪?
可能有朋友会问:“正则表达式听起来好复杂,学它有啥用?” 简单说,正则就是一种 “搜索模板”,能帮你快速在文本里找符合规律的内容,比如验证手机号格式对不对、从一大段文字里提取所有邮箱,比手动筛选高效 10 倍。
你平时注册账号时,输入手机号提示 “格式错误”,背后就是正则在验证;爬网页数据时,提取文章里的日期、链接,也得靠正则。学会正则,处理文本类工作能省超多时间,不管是做 Excel 数据清洗、写 Python 爬虫,还是前端表单验证,都用得上。
二、核心语法符号:用 “大白话 + 例子” 拆解,小白也能懂
正则符号看着乱,但常用的就这几个,一个个吃透,你会发现规律很简单。
- 基础匹配符号:. 和 \d 和 \w,最常用的 “通配符”
.代表任意一个字符(除了换行),比如 “a.b” 能匹配 “a1b”“a@b”“a 好 b”,只要中间是一个字符就行。\d专门匹配数字(0-9),想验证手机号全是数字,用 “\d” 就对了。比如 “\d {11}” 表示 11 个数字,刚好匹配手机号长度。\w匹配字母、数字或下划线,比如用户名里的 “user123”“name_xy” 都能用 “\w+” 匹配。
有朋友会问:“\d 和 0-9 有区别吗?” 其实 “\d” 就是 “[0-9]” 的简写,写起来更方便,意思完全一样。
- 重复限定符: + ? {n},控制字符出现次数*
这些符号用来规定前面的字符能出现多少次,超实用:
*表示出现 0 次或多次,比如 “ab*c” 能匹配 “ac”(b 出现 0 次)、“abc”(b 出现 1 次)、“abbbbc”(b 出现 4 次)。+表示出现 1 次或多次,比*严格,必须至少出现 1 次。比如 “a+b” 能匹配 “ab”“aab”,但不能匹配 “b”(a 没出现)。?表示出现 0 次或 1 次,比如 “https?://” 能匹配 “http://”(s 出现 0 次)和 “https://”(s 出现 1 次),刚好用来匹配网址开头。{n}表示固定出现 n 次,{n,m}表示出现 n 到 m 次。比如手机号是 11 位数字,用 “\d {11}” 比 “\d\d\d\d\d\d\d\d\d\d\d” 简洁多了。
- 边界和分组:^ $ (),精准控制匹配范围
^表示开头,$表示结尾,加了这两个符号,能避免 “部分匹配”。比如验证手机号 “13800138000”,用 “^\d {11}”才对,要是没加`^`,“13800138000abc” 也会被误判为匹配。()用来分组,把一部分正则当整体看,比如 “(ab)+” 表示 “ab” 这个组合出现 1 次或多次,能匹配 “ab”“abab”,但不能匹配 “aab”(不是 “ab” 组合)。
| 符号 | 作用 | 例子 | 匹配结果 |
|---|---|---|---|
| . | 任意字符 | a.b | a1b、a@b |
| \d | 数字 | \d{3} | 123、456 |
| + | 1 次以上 | a+ | a、aa、aaa |
| {2,3} | 2-3 次 | \w{2,3} | ab、123、xy_ |
| ^$ | 开头结尾 | ^abc$ | 只能匹配 abc,不能匹配 xabc |
三、实战案例:3 个高频场景,边做边学才记得牢
光懂符号没用,动手做几个案例,你会发现正则突然就 “活” 了。
- 案例 1:验证手机号格式,再也不怕输错
手机号规则:11 位数字,开头是 13、14、15、17、18、19 开头。
正则表达式:^1[345789]\d{9}$
拆解:
^1开头必须是 1[345789]第二位是 3/4/5/7/8/9 中的一个\d{9}后面跟 9 个数字(总共 11 位)$结尾,确保没有多余字符
在 Python 里这样用:
import re phone = "13800138000" if re.match(r'^1[345789]\d{9}$', phone): print("手机号格式正确") else: print("格式错误")兔子哥第一次写这个正则时,漏了
^和$,结果 “13800138000123” 也被当成正确的,加上边界符就好了。- 案例 2:从文本中提取所有邮箱,效率翻倍
邮箱规则:用户名 @域名。后缀,比如 “user@qq.com”“name_123@gmail.com”。
正则表达式:\w+@\w+\.\w+
拆解:
\w+匹配用户名(字母、数字、下划线)@匹配 @符号(直接写,不用转义)\w+匹配域名(比如 qq、gmail)\.匹配。符号(. 是特殊符号,必须用 \ 转义)\w+匹配后缀(com、cn)
用 Python 提取试试:
text = "我的邮箱是a@163.com,工作邮箱是b_xy@gmail.com" emails = re.findall(r'\w+@\w+\.\w+', text) print(emails) # 输出:['a@163.com', 'b_xy@gmail.com']这里要注意,
.必须转义成\.,不然.会匹配任意字符,就会错把 “a@163com” 也当成邮箱了。- 案例 3:清洗文本,去掉多余空格和符号
爬网页时经常遇到文本里有多余空格、换行,用正则一键清洗:
正则表达式:\s+匹配多个空格、换行、制表符
替换成单个空格:text = "hello world\nwelcome to regex" clean_text = re.sub(r'\s+', ' ', text) print(clean_text) # 输出:hello world welcome to regexre.sub是替换函数,把匹配到的内容换成指定字符,超实用。
四、新手避坑指南:这 5 个错 90% 的人都会犯,提前避开
- 忘记转义特殊符号,比如. * +
像.、*、+ 这些在正则里有特殊含义,想匹配它们本身必须加 \ 转义。比如匹配 “www.baidu.com” 里的.,要用 “www.baidu.com”,直接写 “www.baidu.com” 会匹配 “wwwXbaiduXcom”(. 匹配任意字符)。 - 贪婪匹配导致结果不对
正则默认是贪婪匹配,会尽可能多匹配内容。比如用 “<.*>” 匹配 “标题
”,会匹配整个 “标题
”,而不是只匹配 “”。想非贪婪匹配,在限定符后加?,比如 “<.*?>” 就能只匹配 “
”。
- ** 不用边界符 ^,不然 “12345” 会被 “\d {3}” 误判为匹配(其实只匹配了前 3 位),加上 “^\d {3}$” 就只会匹配刚好 3 位的数字。
- 过度依赖复杂正则,简单问题复杂化
有些场景用简单正则就行,不用追求一步到位。比如验证邮箱不用写得太复杂,先用 “\w+@\w+.\w+” 入门,遇到特殊邮箱(比如带。的用户名 “a.b@qq.com”)再优化,新手别一开始就挑战复杂规则。 - 不测试就直接用,出了错难排查
写好正则后一定要测试,推荐用 “regex101” 这个在线工具,输入正则和测试文本,能实时看到匹配结果,哪里错了一目了然。兔子哥现在写正则还天天用这个工具,测试好了再放到代码里,少踩很多坑。
结尾心得
正则表达式入门难在记符号,但常用的就那十几个,多练几个案例就能记住。新手别害怕符号多,从简单场景入手,先搞定手机号验证、邮箱提取这些高频需求,再慢慢学复杂规则。记住,正则是 “用会的” 不是 “背会的”,每天花 10 分钟写个小例子,一周就能熟练上手。遇到复杂的正则别慌,拆成小块逐个分析,或者用在线工具调试,你会发现正则其实是个超好用的工具,学会了能省超多时间!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
评论列表
新手详解语法案例教学快速上手
新手学正则,教程清晰上手快。
零基础学正则,语法详解+实战,新手快速上手!
新手学正则快速入门精解案例