news 2026/6/26 7:15:48

Python 正则表达式入门:从匹配手机号到提取文本内容

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 正则表达式入门:从匹配手机号到提取文本内容

Python 正则表达式入门:从匹配手机号到提取文本内容

一、前言:为什么要学正则表达式?

在日常Python开发、数据处理、爬虫工作中,我们经常会遇到这些高频需求:

  • 从杂乱文本中精准提取手机号、邮箱、身份证

  • 批量替换文本中的数字、特殊符号、敏感词

  • 按照多种不规则分隔符拆分字符串

  • 校验用户输入的账号、密码、网址格式是否合法

  • 提取简单HTML、文本标签中的核心内容

普通字符串方法只能处理规则固定的简单场景,而正则表达式可以通过一套通用规则,适配所有复杂文本处理场景,是Python文本处理的必备核心技能

Python 内置re 模块,无需额外安装,开箱即用,本文从零带你吃透正则基础,手把手实现实战案例。


二、环境准备:导入re模块

Python 正则操作全部依赖内置re模块,使用前只需导入即可:

importre

re是 regular expression 的缩写,核心作用:自定义字符规则,实现字符串的匹配、查找、替换、分割


三、五大核心方法实战(零基础必掌握)

3.1 re.search():查找第一个匹配项

作用:扫描整个字符串,返回第一个匹配成功的结果,匹配失败返回None

核心注意:必须判断结果非空后,再调用.group()获取匹配内容,避免报错。

案例1:文本中提取手机号
importre text="我的手机号是 13812345678,邮箱是 test@example.com"# 手机号正则:1开头,第二位3-9,后接9位数字phone=re.search(r"1[3-9]\d{9}",text)ifphone:print(f"找到手机号:{phone.group()}")# 输出:找到手机号:13812345678
正则规则解析
  • 1:手机号固定以1开头

  • [3-9]:第二位数字范围3-9(符合国内手机号规则)

  • \d{9}:匹配9位数字(剩余手机号位数)

案例2:文本中提取邮箱
importre text="我的手机号是 13812345678,邮箱是 test@example.com"email=re.search(r"\w+@\w+\.\w+",text)ifemail:print(f"找到邮箱:{email.group()}")# 输出:找到邮箱:test@example.com
邮箱正则规则解析
  • \w+:匹配1个及以上字母、数字、下划线(邮箱用户名)

  • @:精准匹配邮箱固定符号

  • \w+:匹配域名主体

  • \.:转义匹配点号(正则中.是任意字符,必须转义才是普通点)

  • \w+:匹配邮箱后缀(com、cn、net等)

3.2 re.findall():查找所有匹配项(批量提取)

作用:查找字符串中所有匹配内容,以列表形式返回,无匹配则返回空列表,是批量提取文本的高频方法。

案例:批量提取文本中所有数字价格
importre 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:需要处理的原字符串

案例:批量隐藏日期数字
importre text="今天是2026年02月19日,订单编号20260219001"# 所有连续数字替换为Xresult=re.sub(r"\d+","X",text)print(result)# 输出:今天是X年X月X日,订单编号X

3.4 re.split():多分隔符拆分字符串

痛点:Python原生split()仅支持单一分隔符,无法处理不规则分隔的文本。

解决方案re.split()支持多分隔符、不规则空白拆分。

案例:拆分含分号、逗号、空格的文本
importre text="张三;李四,王五 赵六 钱七;孙八"# 匹配分号、逗号、空白字符,多个分隔符合并拆分names=re.split(r"[;,\s]+",text)print(names)# 输出:['张三', '李四', '王五', '赵六', '钱七', '孙八']
规则解析:[;,\s]+
  • []:字符集合,匹配集合内任意一个字符

  • ; , \s:分别匹配分号、逗号、空白字符(空格、换行、制表符)

  • +:匹配1个及以上连续字符,避免拆分空值

3.5 re.match():精准校验文本格式

作用从字符串开头严格匹配,适合做格式校验(手机号、邮箱、账号),必须整串符合规则才会匹配成功。

核心搭配^(开头)+$(结尾)实现全局精准校验。

案例1:完整手机号格式校验
importre# 全局手机号校验规则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:通用邮箱格式校验
importre# 适配绝大多数常规邮箱格式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标签文本,适合轻量文本解析。

importre 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数据分析、爬虫、自动化开发的必备技能!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 7:15:40

Web 渗透测试全流程实战指南:从合规到报告,打造企业级安全评估

一、前言:为什么要做标准化 Web 渗透测试 Web 应用已成为企业核心资产与攻击重灾区。自动化扫描仅能发现 30%–50% 漏洞,业务逻辑、越权、链式利用等高阶风险必须靠人工渗透验证。本文以PTES 七阶段 + OWASP WSTG v4.2为框架,覆盖授权、侦察、测绘、漏洞、利用、后渗透、报…

作者头像 李华
网站建设 2026/6/26 7:15:35

API智能开发与治理平台v5.1发布

ApiGo&#xff08;crabc-api&#xff09; 是一款基于 AI 技术的企业级低代码API开发与治理平台。通过智能化配置&#xff0c;快速将数据变成标准的REST API &#xff0c;支持把API生成 AI Skill技能&#xff0c;实现从开发到运维的全生命周期智能管理。支持多数据源&#xff08…

作者头像 李华
网站建设 2026/6/26 7:14:47

【 ArcGIS Pro 3.7新增功能6】ArcGIS Pro终于支持转换个人地理数据库.mdb!国土等多行业“旧数据”可以直接转换!

时光回溯&#xff0c;很多部门在过去购买的是正版ArcGIS 9.X版本&#xff0c;所以存档数据是个人地理数据.mdb。部分部门一直沿用数据库习惯&#xff0c;数据格式依旧是个人地理数据.mdb。 ArcGIS Pro 一直都不支持个人地理数据库&#xff0c;多年来&#xff0c;这意味着用户要…

作者头像 李华
网站建设 2026/6/26 7:11:57

图论中的完美匹配重配置:从2-switch到k-switch的连通性探索

1. 项目概述&#xff1a;从“换座”游戏到图论中的匹配重配置想象一下这样一个场景&#xff1a;在一个大型圆桌会议上&#xff0c;有偶数位与会者需要两两配对进行深入讨论。组织者已经安排好了一个初始的配对方案&#xff08;一个“完美匹配”&#xff09;&#xff0c;但后来发…

作者头像 李华
网站建设 2026/6/26 7:11:30

出生公证海牙认证怎么办理?出生公证海牙认证需要多长时间?

打算送孩子出国留学、办理海外移民&#xff0c;出国务工或是处理境外事务的朋友&#xff0c;大概率都卡在过出生公证海牙认证这一步。很多人以为就是去公证处盖个章&#xff0c;结果跑了公证处还要跑外事办&#xff0c;户籍地和工作地两头折腾&#xff0c;人在国外的更是无从下…

作者头像 李华
网站建设 2026/6/26 7:10:59

5分钟搞定Android自动打卡:DailyTask智能助手让你的考勤无忧

5分钟搞定Android自动打卡&#xff1a;DailyTask智能助手让你的考勤无忧 【免费下载链接】AutoDingding 钉钉自动打卡 项目地址: https://gitcode.com/gh_mirrors/au/AutoDingding 还在为每天匆忙赶路只为按时打卡而烦恼吗&#xff1f;还在担心会议延迟或交通拥堵导致考…

作者头像 李华