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读取与写入csv格式文件的示例代码

    python读取与写入csv格式文件的示例代码

    本篇文章主要介绍了python读取与写入csv格式文件的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • python3+selenium实现qq邮箱登陆并发送邮件功能

    python3+selenium实现qq邮箱登陆并发送邮件功能

    这篇文章主要为大家详细介绍了python3+selenium实现qq邮箱登陆,并发送邮件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Django路由Path方法的实现

    Django路由Path方法的实现

    本文主要介绍了Django路由Path方法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 一篇文章让你快速掌握Pandas可视化图表

    一篇文章让你快速掌握Pandas可视化图表

    大家都知道Pandas是基于Python平台的大数据分析与处理的利器,它可以把十分复杂的可视化过程,变得简单一点,这篇文章主要给大家介绍了关于Pandas可视化图表的相关资料,需要的朋友可以参考下
    2021-08-08
  • Python探索之URL Dispatcher实例详解

    Python探索之URL Dispatcher实例详解

    这篇文章主要介绍了Python探索之URL Dispatcher实例详解,还是比较不错的,这里分享给大家,供需要的朋友参考。
    2017-10-10
  • python实现在线翻译

    python实现在线翻译

    这篇文章主要介绍了python实现在线翻译,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Python TypeError: ‘float‘ object is not subscriptable错误解决

    Python TypeError: ‘float‘ object is not subscriptable错

    发现问题写python的时候出现了这个错,所以想着给大家总结下,这篇文章主要给大家介绍了关于Python TypeError: ‘float‘ object is not subscriptable错误的解决办法,需要的朋友可以参考下
    2022-12-12
  • Django REST框架创建一个简单的Api实例讲解

    Django REST框架创建一个简单的Api实例讲解

    在本篇文章里小编给大家整理的是关于Django REST框架创建一个简单的Api实例讲解,有需要的朋友们可以学习下。
    2019-11-11
  • Pytorch实现常用乘法算子TensorRT的示例代码

    Pytorch实现常用乘法算子TensorRT的示例代码

    pytorch 用于训练,TensorRT用于推理是很多AI应用开发的标配。大家往往更加熟悉 pytorch 的算子,而不太熟悉TensorRT的算子。本文介绍了Pytorch中常用乘法的TensorRT实现,感兴趣的可以了解一下
    2022-06-06
  • python中使用pyhook实现键盘监控的例子

    python中使用pyhook实现键盘监控的例子

    这篇文章主要介绍了python中使用pyhook实现键盘监控的例子,包含pyhook的下载地址和手册地址及一个Windows下的监控实例,需要的朋友可以参考下
    2014-07-07

最新评论