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

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

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

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

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

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

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

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

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

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

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


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

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

python 复制代码
import re

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


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

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

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

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

案例1:文本中提取手机号
python 复制代码
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:文本中提取邮箱
python 复制代码
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():查找所有匹配项(批量提取)

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

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

案例:批量隐藏日期数字
python 复制代码
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() 支持多分隔符、不规则空白拆分。

案例:拆分含分号、逗号、空格的文本
python 复制代码
import re

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

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

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

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

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

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

案例1:完整手机号格式校验
python 复制代码
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:通用邮箱格式校验
python 复制代码
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标签文本,适合轻量文本解析。

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