Python正则表达式入门从匹配手机号到提取文本内容的实战教学
作者:我材不敲代码
一、前言:为什么要学正则表达式?
在日常Python开发、数据处理、爬虫工作中,我们经常会遇到这些高频需求:
- 从杂乱文本中精准提取手机号、邮箱、身份证
- 批量替换文本中的数字、特殊符号、敏感词
- 按照多种不规则分隔符拆分字符串
- 校验用户输入的账号、密码、网址格式是否合法
- 提取简单HTML、文本标签中的核心内容
普通字符串方法只能处理规则固定的简单场景,而正则表达式可以通过一套通用规则,适配所有复杂文本处理场景,是Python文本处理的必备核心技能。
Python 内置 re 模块,无需额外安装,开箱即用,本文从零带你吃透正则基础,手把手实现实战案例。
二、环境准备:导入re模块
Python 正则操作全部依赖内置 re 模块,使用前只需导入即可:
import re
re 是 regular expression 的缩写,核心作用:自定义字符规则,实现字符串的匹配、查找、替换、分割。
三、五大核心方法实战(零基础必掌握)
3.1 re.search():查找第一个匹配项
作用:扫描整个字符串,返回第一个匹配成功的结果,匹配失败返回 None。
核心注意:必须判断结果非空后,再调用 .group() 获取匹配内容,避免报错。
案例1:文本中提取手机号
import re
text = "我的手机号是 13812345678,邮箱是 test@example.com"
# 手机号正则:1开头,第二位3-9,后接9位数字
phone = re.search(r"1[3-9]\d{9}", text)
if phone:
print(f"找到手机号:{phone.group()}")
# 输出:找到手机号:13812345678
正则规则解析
1:手机号固定以1开头[3-9]:第二位数字范围3-9(符合国内手机号规则)\d{9}:匹配9位数字(剩余手机号位数)
案例2:文本中提取邮箱
import re
text = "我的手机号是 13812345678,邮箱是 test@example.com"
email = re.search(r"\w+@\w+\.\w+", text)
if email:
print(f"找到邮箱:{email.group()}")
# 输出:找到邮箱:test@example.com
邮箱正则规则解析
\w+:匹配1个及以上字母、数字、下划线(邮箱用户名)@:精准匹配邮箱固定符号\w+:匹配域名主体\.:转义匹配点号(正则中.是任意字符,必须转义才是普通点)\w+:匹配邮箱后缀(com、cn、net等)
3.2 re.findall():查找所有匹配项(批量提取)
作用:查找字符串中所有匹配内容,以列表形式返回,无匹配则返回空列表,是批量提取文本的高频方法。
案例:批量提取文本中所有数字价格
import re text = "商品价格:100元、200元、350元、89.9元" # \d+ 匹配连续数字 prices = re.findall(r"\d+", text) print(prices) # 输出:['100', '200', '350', '89', '9']
适合场景:批量提取数字、关键词、特殊格式文本,比循环匹配效率高10倍以上。
3.3 re.sub():正则替换字符串
作用:根据正则规则匹配内容,批量替换为指定字符,完美解决普通replace无法处理的模糊替换场景。
语法:re.sub(pattern, replacement, string)
- pattern:正则匹配规则
- replacement:替换后的内容
string:需要处理的原字符串
案例:批量隐藏日期数字
import re text = "今天是2026年02月19日,订单编号20260219001" # 所有连续数字替换为X result = re.sub(r"\d+", "X", text) print(result) # 输出:今天是X年X月X日,订单编号X
3.4 re.split():多分隔符拆分字符串
痛点:Python原生 split() 仅支持单一分隔符,无法处理不规则分隔的文本。
解决方案:re.split() 支持多分隔符、不规则空白拆分。
案例:拆分含分号、逗号、空格的文本
import re text = "张三;李四,王五 赵六 钱七;孙八" # 匹配分号、逗号、空白字符,多个分隔符合并拆分 names = re.split(r"[;,\s]+", text) print(names) # 输出:['张三', '李四', '王五', '赵六', '钱七', '孙八']
规则解析:[;,\s]+
[]:字符集合,匹配集合内任意一个字符; , \s:分别匹配分号、逗号、空白字符(空格、换行、制表符)+:匹配1个及以上连续字符,避免拆分空值
3.5 re.match():精准校验文本格式
作用:从字符串开头严格匹配,适合做格式校验(手机号、邮箱、账号),必须整串符合规则才会匹配成功。
核心搭配:^(开头)+ $(结尾)实现全局精准校验。
案例1:完整手机号格式校验
import re
# 全局手机号校验规则
phone_pattern = r"^1[3-9]\d{9}$"
print(re.match(phone_pattern, "13812345678")) # 匹配成功
print(re.match(phone_pattern, "138123456")) # 位数不足,匹配失败
print(re.match(phone_pattern, "23812345678")) # 开头错误,匹配失败
案例2:通用邮箱格式校验
import re # 适配绝大多数常规邮箱格式 email_pattern = r"^[\w.+-]+@[\w-]+\.[\w.]+$" print(re.match(email_pattern, "test@example.com")) # 合法 print(re.match(email_pattern, "test123@qq.com")) # 合法 print(re.match(email_pattern, "test.com")) # 非法
提示:业务简单格式校验可使用该正则,正式生产邮件校验需结合发送验证。
四、进阶实战:提取HTML标签内容
利用正则分组+非贪婪匹配,可快速提取简单HTML标签文本,适合轻量文本解析。
import re html = "<h1>Python正则入门教程</h1><p>零基础快速掌握正则用法</p>" # 分组匹配标签内容,? 开启非贪婪匹配 contents = re.findall(r"<\w+>(.*?)</\w+>", html) print(contents) # 输出:['Python正则入门教程', '零基础快速掌握正则用法']
核心规则解析
<\w+>:匹配任意HTML开始标签(.*?):分组+非贪婪匹配,精准提取标签内文本(核心!避免多标签串匹配)</\w+>:匹配任意HTML结束标签
重要提醒:正则仅适合简单静态HTML片段,复杂爬虫解析请使用 BeautifulSoup、lxml 专业库。
五、正则基础符号速查表(收藏必备)
| 正则符号 | 详细含义 |
|---|---|
. | 匹配任意单个字符(换行符除外) |
\d | 匹配任意数字,等价于 [0-9] |
\D | 匹配任意非数字字符 |
\w | 匹配字母、数字、下划线 |
\W | 匹配非字母、非数字、非下划线 |
\s | 匹配空白字符(空格、换行、制表符) |
\S | 匹配非空白字符 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
* | 匹配前面字符 0次或多次 |
+ | 匹配前面字符 1次或多次 |
? | 匹配前面字符 0次或1次,开启非贪婪匹配 |
{n} | 精准匹配前面字符 n 次 |
{n,m} | 匹配前面字符 n~m 次 |
[] | 字符集合,匹配集合内任意单个字符 |
() | 分组匹配,精准提取分组内内容 |
六、五大核心方法选型指南
新手不用死记硬背,根据需求直接选:
| 方法 | 适用场景 |
|---|---|
re.search() | 查找第一个匹配内容 |
re.match() | 字符串整体格式校验(从头匹配) |
re.findall() | 批量查找所有匹配内容(最常用) |
re.sub() | 批量替换文本内容 |
re.split() | 多分隔符、不规则文本拆分 |
七、新手必看:为什么正则前要加 r?
大家会发现所有案例中,正则表达式都写为 r"\d+" 原始字符串格式。
核心作用:r 代表原生字符串,屏蔽Python转义机制,避免正则符号双重转义报错。
如果不添加 r,复杂正则中的\d、\s 容易被Python解析为转义字符,导致正则规则失效。
编码好习惯:所有Python正则表达式,统一使用 r"正则规则" 格式!
八、全文总结
本文从零入门Python正则表达式,覆盖开发90%基础场景,核心知识点复盘:
- 掌握 search/findall/sub/split/match 五大核心方法,适配查找、替换、拆分、校验全场景
- 熟记 \d、\w、\s、+、*、?、^、$ 基础符号,可完成绝大多数文本匹配
- 手机号、邮箱、HTML内容提取为通用实战模板,可直接复用
- 正则优先使用
r""原始字符串,规避转义问题 - 简单文本解析用正则,复杂网页解析用专业爬虫库
正则看似是符号密码,实则规则固定,熟练后可以极大提升文本处理效率,是Python数据分析、爬虫、自动化开发的必备技能!
到此这篇关于Python正则表达式入门从匹配手机号到提取文本内容的实战教学的文章就介绍到这了,更多相关Python正则表达式匹配手机号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
