python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python re库介绍

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

作者:wanglaqqqq

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

1. 模块概述

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

2. 核心概念

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

​**(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. 常见问题与注意事项

6. 应用场景

​7. 总结

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

您可能感兴趣的文章:
阅读全文