news 2026/10/8 18:21:49

Python 正则表达式 re 模块详解,文本提取、字符串清洗实战教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 正则表达式 re 模块详解,文本提取、字符串清洗实战教程

前言

在文本处理场景中,我们经常需要从一堆杂乱字符串中提取手机号、邮箱、网址,或者清洗文本里多余空格、特殊符号。普通字符串 find、replace 方法面对复杂规则很难实现,正则表达式就是专门用来描述文本匹配规则的工具。Python 内置 re 模块,无需额外安装。很多初学者觉得正则晦涩难懂,其实掌握常用元字符和 re 模块几个核心函数,就可以处理 80% 以上的文本提取需求。本文从基础语法到实战案例,带大家吃透 Python 正则。

一、正则基础元字符介绍

简单介绍高频正则符号:.匹配任意单个字符(换行除外);*匹配前面字符 0 次或者多次;+匹配前面字符 1 次或者多次;?匹配前面字符 0 次或者 1 次;\d数字 0-9;\w字母数字下划线;\s空白字符;[]字符集合;()分组提取内容;^字符串开头;$字符串结尾。

注意:Python 字符串里反斜杠需要转义,写正则推荐使用原始字符串 r"",避免转义冲突。

二、re 模块核心函数

  1. re.search:扫描整个字符串,找到第一个匹配结果;
  2. re.match:只从字符串开头匹配;
  3. re.findall:查找全部匹配内容,返回列表,最常用;
  4. re.sub:替换匹配到的字符串,文本清洗首选;
  5. re.compile:预编译正则表达式,多次复用的时候提升性能。

基础示例:提取文本里面手机号,国内手机号 11 位数字。

import re text = "联系电话:13800138000,备用号码13900139000,无效号码123456" pattern = r'1[3-9]\d{9}' result = re.findall(pattern, text) print(result)

运行结果返回所有匹配到手机号列表。1[3-9]代表第一位是 1,第二位 3 到 9,后面跟 9 位数字。

三、实战案例 1:提取邮箱地址

邮箱规则:用户名 @域名,用户名可以字母数字下划线,域名包含点。

email_text = "联系方式:test@163.com,demo@qq.com,wrong@.com" email_pattern = r'[a-zA-Z0-9_-]+@[a-zA-Z0-9]+\.[a-zA-Z]+' email_list = re.findall(email_pattern, email_text) print(email_list)

使用 findall 可以一次性提取全部邮箱。如果只想提取用户名部分,可以使用分组 ():

pattern_group = r'([a-zA-Z0-9_-]+)@[a-zA-Z0-9]+\.[a-zA-Z]+' res = re.findall(pattern_group, email_text)

括号内的内容,会单独提取出来。

四、实战案例 2:文本清洗,去除多余空白、特殊符号

爬虫获取的网页文本经常夹杂大量换行符、多余空格、特殊符号,使用 re.sub 做替换清洗。

raw_text = "Python 正则\n教程,#¥%,测试 文本!!" # 多个空白替换成单个空格 clean_text = re.sub(r'\s+', " ", raw_text) # 移除中文标点外特殊符号 clean_text = re.sub(r'[#¥%]', "", clean_text) print(clean_text)

re.sub 的参数:正则表达式,替换内容,原始字符串。适合文本预处理、数据清洗场景。

五、预编译 re.compile,提升循环匹配性能

如果一段正则需要循环匹配上千条文本,每次 re.findall 都会重复编译正则,性能较差。使用 compile 预编译一次,重复使用。

phone_pattern = re.compile(r'1[3-9]\d{9}') text_list = ["电话13800138000","号码13511112222"] for t in text_list: print(phone_pattern.findall(t))

六、正则修饰符

re.I 忽略大小写;re.S 让.匹配换行符;re.M 多行模式。 比如带换行的网页文本,开启 re.S,.可以跨多行匹配内容。

html = """标题:Python教程 作者:CSDN """ res = re.search(r"标题:(.*?)作者", html, re.S) print(res.group(1))

非贪婪匹配.*?是高频知识点:.*贪婪匹配尽可能多字符,.*?尽可能少匹配,爬虫提取标签内容基本都用非贪婪模式。

七、正则避坑提醒

  1. 贪婪匹配陷阱:忘记加?,导致匹配范围超出预期;
  2. 转义问题:正则一定要用 r 原始字符串;
  3. 不要滥用正则解析 HTML:复杂网页解析优先 BeautifulSoup,正则只适合简单文本;
  4. 正则不是万能:复杂嵌套结构(括号嵌套)正则很难处理。

八、结语

正则表达式是文本处理利器,数据清洗、日志解析、简单文本抓取都会用到。不需要死记所有正则语法,记住常用元字符,遇到需求先写简单规则,逐步调试。调试正则可以在线正则测试网站实时验证表达式。学习正则最好的方式就是多写多测试。在数据处理工作中,re 模块配合 pandas,能够快速完成文本类数据清洗。后续会继续分享 pandas 数据清洗实战案例,欢迎关注。

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

洗衣店小程序源码系统全解析:功能规划、技术选型与上线经验

洗衣店小程序源码系统,说白了就是把门店收衣、洗护、取衣、会员管理这一整条业务链搬进微信小程序的一套代码。上半年我帮一位开洗衣店的朋友从零到一搭过这么一套系统,用户端负责下单、支付、查进度,商家端负责接单、打小票、更新洗护状态&a…

作者头像 李华
网站建设 2026/10/8 18:19:14

FDE实战:用Agent Harness、RAG与MCP串起AI应用全流程

从去年开始,我身边越来越多同事的title里出现了FDE三个字母。有人以为这是前端工程师(Front-End Developer)的缩写,也有人觉得是某个新职级。其实在我做的这条业务线里,FDE指的是Feature/Full-cycle Development Engin…

作者头像 李华
网站建设 2026/10/8 18:15:42

Python自动备份脚本实战:数据不丢,代码不慌

前言 数据丢了才想起来备份?服务器宕机、误删文件、数据库清空,这些事故每天都在发生。备份这件事,手动做容易忘,忘了就出事。**让脚本每天自动备份,是最省心的方案。**今天分享一套Python自动备份脚本:数据…

作者头像 李华
网站建设 2026/10/8 18:15:38

基于eFuse与STM32的电源路径保护及监控方案

前阵子做一块工业控制板的电源部分,24V输入要给后级各种负载供电,板卡要求热插拔不损坏、负载短路不烧板、故障能远程上报。用TPS259483AYWPR这颗eFuse加上STM32F302VC来做电源路径保护,算是把嵌入式系统的电源管理这个环节做扎实了。这块方案…

作者头像 李华
网站建设 2026/10/8 18:15:35

基于TPS259483与PIC18F45K80的智能电源路径保护设计

1. 为什么需要专门管电源路径 嵌入式系统和工业控制器里,电源设计往往是被低估的一环。很多人觉得“只要电压对、电流够就行”,可真正到了现场,上电瞬间的浪涌、负载短路、电源反接、甚至一路电源抖动导致整个板卡复位,这些问题远…

作者头像 李华