Python 库手册:re 正则表达式模块

re 是 Python 用于处理正则表达式的标准模块,用于字符串的匹配、查找、替换、分割等高级文本处理操作。它支持 Perl 风格的正则语法,并能处理复杂的模式匹配任务。

常见应用场景:

(1)表单输入验证(如邮箱、手机号)。

(2)文本搜索与抽取(如从网页中提取 URL、标签)。

(3)数据清洗(批量替换、剔除冗余文本)。

(4)日志分析(解析格式化文本)。

(5)自然语言处理(模式标注)

◆ ◆ ◆

核心概念

1、正则表达式是一种匹配字符串模式的语言,可描述复杂的字符组合规则。

2、re 模块提供了字符串匹配相关的函数,如 search、match、findall、sub 等。

3、正则表达式支持字符集、数量词、分组、断言等高级语法。

4、匹配结果通常以 Match 或 MatchObject 形式返回,可提取分组内容。

5、使用 re.compile() 可将正则预编译,提升性能,适合重复使用。

◆ ◆ ◆

应用举例

例 1:检测邮箱格式

python 复制代码
import re
text = "请联系邮箱 admin@mediaTEA.com 或 hr@mediaTEA.org"emails = re.findall(r'\b\w+@\w+\.\w+\b', text)print(emails)  # ['admin@mediaTEA.com', 'hr@mediaTEA.org']

例 2:提取网页中的所有链接

python 复制代码
import re
html = '<a href="http://example.com">Link</a> <a href="https://test.com">Another</a>'links = re.findall(r'href="(http[s]?://[^"]+)"', html)print(links)  # ['http://example.com', 'https://test.com']

例 3:替换所有数字为星号

python 复制代码
import re
text = "密码是 123456"new_text = re.sub(r'\d+', '******', text)print(new_text)  # 密码是 ******

例 4:按标点分割句子

python 复制代码
import re
sentence = "你好!今天好吗?天气真好。"parts = re.split(r'[!?。]', sentence)print([s for s in parts if s])  # ['你好', '今天好吗', '天气真好']

例 5:获取手机号中的区号和号码

python 复制代码
import re
phone = "手机号:186-1234-5678"match = re.search(r'(\d{3})-(\d{4})-(\d{4})', phone)if match:    print("区段:", match.group(1))    print("号码:", match.group(2), match.group(3))

◆ ◆ ◆

常用函数速览

re.match(pattern, string)

从字符串开头匹配正则表达式。

参数:

pattern:正则表达式字符串

string:待匹配字符串

返回:Match 对象或 None

re.search(pattern, string)

在整个字符串中查找第一个匹配项。

参数:同上

返回:Match 对象或 None

re.findall(pattern, string)

找出所有非重复的匹配项(以列表形式返回)。

参数:同上

返回:字符串列表(或分组元组列表)

re.finditer(pattern, string)

返回一个迭代器,每个元素为一个匹配结果 MatchObject。

参数:同上

re.sub(pattern, repl, string)

替换字符串中所有匹配项。

参数:

repl:替换内容,可为字符串或函数

返回:替换后的新字符串

re.split(pattern, string)

按照匹配项对字符串进行分割。

参数:同上

返回:子字符串组成的列表

re.compile(pattern)

将正则表达式编译为模式对象,用于重复匹配。

参数:

pattern:正则表达式字符串

返回:Pattern 对象,可用于调用 .match()、.search() 等方法

◆ ◆ ◆

补充说明

1、正则表达式中反斜杠 \ 是转义符,建议使用原始字符串(如 r"\d+")以避免双重转义。

2、re 模块不支持 lookbehind 可变宽度断言。如 (?<=abc{1,}) 是不允许的。

3、正则表达式适合处理结构清晰、可预判的文本。对于自然语言分析请慎用。

4、正则表达式过于复杂时可用 re.VERBOSE 模式使其更易阅读。

"点赞有美意,赞赏是鼓励"

相关推荐
刘天远1 分钟前
Agent成本核算实现:事件表、状态分布与Python归集
前端·数据库·人工智能·python
Python图像识别13 分钟前
40-【2027毕设】YOLO11面部口罩检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
赵大仁17 分钟前
开源清单怎么维护才不烂掉?GitHub Actions 每周查死链 + 软 404 检测实录
python·ci/cd·自动化·开源项目·踩坑·github actions·json schema
念何架构之路18 分钟前
go-grpc核心抽象接口
开发语言·后端·golang
玩AI的奶茶19 分钟前
24GB 显存能跑多大的模型?参数量、精度与显存占用对照表
人工智能·python·算法·ai·aigc·gpu算力·算力租赁
kimnoic20 分钟前
Python操作Git命令的详细指南
开发语言·python
Python图像识别23 分钟前
39-【2027毕设】YOLO11行人摔倒检测系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
计算机毕业编程指导师31 分钟前
【计算机毕设】基于Hadoop的人口统计特征与肥胖风险关联分析的数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·课程设计·肥胖风险
量化吞吐机32 分钟前
涨跌停价与最小变动价位,为什么要分开看?
python
FYKJ_201032 分钟前
django个性化新闻推荐35173-计算机课程设计、毕业设计
java·spring boot·后端·python·架构·django·课程设计