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中的Linting提高代码质量

    手把手教你用Python中的Linting提高代码质量

    Python是一种不断发展的语言,随着它的演化和扩展,可用工具和开发策略的数量也在增加,近来流行的一个过程是linting—检查代码的潜在问题,下面这篇文章主要给大家介绍了关于用Python中Linting提高代码质量的相关资料,需要的朋友可以参考下
    2023-01-01
  • python基础练习之几个简单的游戏

    python基础练习之几个简单的游戏

    这篇文章主要介绍了python基础练习之几个简单的游戏,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Python学习思维导图(必看篇)

    Python学习思维导图(必看篇)

    下面小编就为大家带来一篇Python学习思维导图(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Python format()格式化输出方法

    Python format()格式化输出方法

    这篇文章主要介绍了Python format()格式化输出方法, Python 2.6以后,Python 中的就提供了字符串类型(str)提供了 format() 方法对字符串进行格式化,夏敏我们就来了解这个方法吧,需要的小伙伴也可以参考一下

    2021-12-12
  • flask循环导入的问题解决

    flask循环导入的问题解决

    循环导入是指两个文件相互导入对,本文主要介绍了flask循环导入的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • python将txt文件读入为np.array的方法

    python将txt文件读入为np.array的方法

    今天小编就为大家分享一篇python将txt文件读入为np.array的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 对python创建及引用动态变量名的示例讲解

    对python创建及引用动态变量名的示例讲解

    今天小编就为大家分享一篇对python创建及引用动态变量名的示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 基于python解析XML文件并将数据存储到MongoDB的代码示例

    基于python解析XML文件并将数据存储到MongoDB的代码示例

    在软件开发中,我们经常需要处理各种格式的数据,XML 是一种常用的数据交换格式,它可以存储和传输结构化数据,很多网站会提供 XML 格式的数据接口,以便其他系统可以方便地获取数据,本文介绍了基于python解析XML文件并将数据存储到MongoDB的代码示例,需要的朋友可以参考下
    2024-06-06
  • Python装饰器实现函数运行时间的计算

    Python装饰器实现函数运行时间的计算

    这篇文章主要为大家详细介绍了Python函数运行时间的计算,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Python机器学习应用之朴素贝叶斯篇

    Python机器学习应用之朴素贝叶斯篇

    朴素贝叶斯模型是一组非常简单快速的分类算法,通常适用于维度非常高的数据集。因为运行速度快,而且可调参数少,因此非常适合为分类问题提供快速粗糙的基本方案
    2022-01-01

最新评论