python正则表达式标准库之re库的详细介绍

 更新时间:2025年06月30日 10:54:24   作者:wanglaqqqq  
Python的re库是用于处理正则表达式的标准库,正则表达式是一种强大而灵活的文本处理工具,能够帮助你执行复杂的字符串匹配和替换操作,这篇文章主要介绍了python正则表达式标准库之re库的详细介绍,需要的朋友可以参考下

1. 模块概述

re 是 Python 标准库中用于正则表达式操作的模块,提供字符串的复杂模式匹配、搜索、替换等功能。正则表达式(Regex)通过特定语法规则描述字符串模式,适用于文本解析、数据清洗、输入验证等场景。

2. 核心概念

​**(1) 正则表达式语法**

  • 普通字符:如 a1 直接匹配自身。
  • 特殊字符
    • .:匹配任意字符(除换行符,除非启用 re.DOTALL)。
    • ^:匹配字符串开头。
    • $:匹配字符串结尾。
    • \d:匹配数字(等价于 [0-9])。
    • \w:匹配字母、数字、下划线(等价于 [a-zA-Z0-9_])。
    • \s:匹配空白符(空格、制表符、换行等)。
    • []:字符集合(如 [a-z] 匹配小写字母)。
    • |:逻辑或(如 a|b 匹配 a 或 b)。
  • 量词
    • *:匹配前一个字符 0 次或多次。
    • +:匹配前一个字符 1 次或多次。
    • ?:匹配前一个字符 0 次或 1 次。
    • {m}:匹配前一个字符恰好 m 次。
    • {m,n}:匹配前一个字符 m 到 n 次。
  • 分组与捕获
    • ():定义捕获组(可通过索引或命名引用)。
    • (?:):非捕获组(仅分组,不捕获)。

​**(2) 修饰符(Flags)​**

修饰符描述
re.IGNORECASE (或 re.I)忽略大小写
re.MULTILINE (或 re.M)多行模式(^ 和 $ 匹配每行的开头/结尾)
re.DOTALL (或 re.S). 匹配包括换行符在内的所有字符
re.VERBOSE (或 re.X)允许正则表达式换行并添加注释

​3. 常用函数与示例

​**(1) 匹配与搜索**

函数描述示例
re.match(pattern, string)从字符串开头匹配模式,成功返回 Match 对象,否则返回 Nonere.match(r'\d+', '123abc') → Match 对象(匹配 '123')
re.search(pattern, string)扫描整个字符串查找第一个匹配,成功返回 Match 对象,否则返回 Nonere.search(r'\d+', 'abc123def') → Match 对象(匹配 '123')
re.findall(pattern, string)返回所有非重叠匹配的列表(直接返回字符串或元组列表)。re.findall(r'\d+', 'a1b22c333') → ['1', '22', '333']
re.finditer(pattern, string)返回所有匹配的迭代器,每个元素是 Match 对象。[m.group() for m in re.finditer(r'\d+', 'a1b22')] → ['1', '22']

 示例代码

import re

text = "Email: user@example.com, Phone: 123-456-7890"
# 提取邮箱
email = re.search(r'\w+@\w+\.\w+', text).group()  # 'user@example.com'
# 提取所有电话号码片段
phones = re.findall(r'\d{3}-\d{3}-\d{4}', text)   # ['123-456-7890']

**(2) 替换与分割**

函数描述示例
re.sub(pattern, repl, string)将匹配模式的部分替换为 repl,返回新字符串。re.sub(r'\d+', '#', 'a1b22c') → 'a#b#c'
re.split(pattern, string)按模式分割字符串,返回列表。re.split(r'\W+', 'Hello, world!') → ['Hello', 'world', '']

 示例代码

# 替换日期格式(YYYY-MM-DD → DD/MM/YYYY)
date = "2023-10-05"
new_date = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\3/\2/\1', date)  # '05/10/2023'

# 分割复杂文本
text = "apple,,banana;;cherry"
parts = re.split(r'[,;]+', text)  # ['apple', 'banana', 'cherry']

**(3) 预编译正则表达式**

使用 re.compile() 预编译正则表达式以提高效率(尤其需多次使用同一模式时):

pattern = re.compile(r'\d+')
match = pattern.match('123abc')  # 等效于 re.match(r'\d+', '123abc')

**(4) 匹配对象(Match Object)​**

成功匹配后返回的 Match 对象提供以下方法:

方法描述
group(n)返回第 n 个分组(默认 n=0 表示整个匹配)。
groups()返回所有分组的元组。
start() / end()返回匹配的起始/结束索引。
span()返回匹配的索引范围元组 (start, end)

 示例

text = "Date: 2023-10-05"
match = re.search(r'(\d{4})-(\d{2})-(\d{2})', text)
if match:
    print(match.group(0))   # '2023-10-05'
    print(match.group(1))   # '2023'
    print(match.groups())   # ('2023', '10', '05')
    print(match.span(1))    # (6, 10)

4. 高级技巧

​**(1) 非贪婪匹配**

默认量词(如 *+)是贪婪的(尽可能多匹配),添加 ? 可改为非贪婪模式:

# 贪婪匹配
re.findall(r'<.*>', '<div>text</div>')  # ['<div>text</div>']
# 非贪婪匹配
re.findall(r'<.*?>', '<div>text</div>') # ['<div>', '</div>']

**(2) 命名分组**

使用 (?P<name>...) 定义命名分组,通过 group('name') 访问:

text = "ID: 123, Name: Alice"
match = re.search(r'ID: (?P<id>\d+), Name: (?P<name>\w+)', text)
print(match.group('id'))    # '123'
print(match.group('name'))  # 'Alice'

5. 常见问题与注意事项

  • 转义字符:在正则表达式中使用 \ 需写成 \\,或使用原始字符串 r'' 简化:

    python

    re.match(r'\d+', '123')    # 正确(原始字符串)
    re.match('\\d+', '123')    # 正确(常规字符串需转义)
  • 性能优化

    • 多次使用同一模式时,预编译正则表达式(re.compile())。
    • 避免过度复杂的正则表达式(如深层嵌套量词)。
  • 匹配失败处理:检查 Match 对象是否为 None 避免异常:

    python

    match = re.search(r'\d+', 'abc')
    if match:
        print(match.group())

6. 应用场景

  • 数据提取:从日志、HTML、JSON 中提取特定字段。
  • 输入验证:检查邮箱、电话、密码格式是否合法。
  • 文本清洗:替换敏感词、标准化日期格式。
  • 复杂搜索:查找符合特定模式的字符串片段。

​7. 总结

  • 核心功能re 模块通过正则表达式实现高效的字符串模式操作。
  • 常用函数match()search()findall()sub()split()
  • 匹配对象:利用 group()groups() 提取分组内容。
  • 高级特性:非贪婪匹配、命名分组、预编译优化。

到此这篇关于python正则表达式标准库之re库的文章就介绍到这了,更多相关python re库介绍内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python count()函数用法详解

    Python count()函数用法详解

    这篇文章主要给大家介绍了关于Python count()函数用法的相关资料,Python count()方法用于统计字符串里某个字符出现的次数,可选参数为在字符串搜索的开始与结束位置,需要的朋友可以参考下
    2024-02-02
  • python查看zip包中文件及大小的方法

    python查看zip包中文件及大小的方法

    这篇文章主要介绍了python查看zip包中文件及大小的方法,实例分析了Python基于zipfile模块操作zip压缩文件的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • Python可迭代对象操作示例

    Python可迭代对象操作示例

    这篇文章主要介绍了Python可迭代对象操作,涉及Python列表生成式、迭代器、数据遍历等相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • python语法之通过value找key问题

    python语法之通过value找key问题

    这篇文章主要介绍了python语法之通过value找key问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • python使用7z解压apk包的方法

    python使用7z解压apk包的方法

    这篇文章主要介绍了python使用7z解压apk包的方法,涉及Python的shell命令调用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Python中将字符串转换为列表的常用八种方法

    Python中将字符串转换为列表的常用八种方法

    本文介绍了Python中将字符串转换为列表的八种常用方法,包括split()方法、列表解析、正则表达式、str()函数、map()函数、re.split()、re.finditer()和逐字符遍历,感兴趣的可以了解一下
    2024-07-07
  • 新建文件时Pycharm中自动设置头部模板信息的方法

    新建文件时Pycharm中自动设置头部模板信息的方法

    这篇文章主要介绍了新建文件时Pycharm中自动设置头部模板信息的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码

    自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码

    这篇文章主要介绍了自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码,本文通过实例代码讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 详解python播放音频的三种方法

    详解python播放音频的三种方法

    这篇文章主要介绍了python播放音频的三种方法,每种方法通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 详解Python 装饰器执行顺序迷思

    详解Python 装饰器执行顺序迷思

    这篇文章主要介绍了详解Python 装饰器执行顺序迷思,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论