这篇应该是介绍 python 内置模块的最后一篇
re
模块是 Python 标准库中处理正则表达式的核心工具,提供强大的文本模式匹配、搜索和替换功能。通过特定的语法规则,可以快速完成以下任务:
正则表达式引擎基于 PCRE(Perl Compatible Regular Expressions)实现
函数名称 | 匹配范围 | 返回类型 | 适用场景 | 性能特点 |
---|---|---|---|---|
re.match |
仅字符串开头 | Match/None | 格式校验 | 快速失败 |
re.search |
全局首次匹配 | Match/None | 内容提取 | 中等性能 |
re.findall |
所有非重叠匹配 | list | 批量数据收集 | 内存消耗高 |
re.finditer |
所有非重叠匹配 | iterator | 大文本处理 | 内存友好 |
re.split |
分割字符串 | list | 复杂分隔符处理 | 替代str.split |
re.compile |
- | Pattern对象 | 高频正则表达式复用 | 提升30%性能 |
re.match(pattern, string, flags=0)
match()
就返回 None
。^
锚点参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
re.Match
对象,使用 group(num)
或 groups()
匹配对象函数来获取匹配表达式None
匹配对象方法 | 描述 |
---|---|
group(num=0) |
匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() |
返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
# 验证字符串是否以数字开头,调用这个方法等同于 r'^\d+'
# 如果匹配的字符串是c123abc,是匹配不到的
if re.match(r'\d+', '123abc'):
print("Valid header")
else:
print("Invalid header")
# 提取开头的版本号
version = re.match(r'v?(\d+\.\d+)', 'v3.8.1').group(1) # '3.8'
re.search(pattern, string, flags=0)
参数与返回:同re.match
使用案例
# 查找第一个有效数字串,只匹配第一个
text = "Total: 1500 items, price $299"
match = re.search(r'\d+', text)
if match:
print(f"价格:{match.group()}") # 1500
# 带条件的搜索
pattern = r'(?<=ID:)\s*[A-Z0-9]{8}' # 查找ID后的8位编码
id_code = re.search(pattern, "User ID: AB3XK9P2").group() # AB3XK9P2
re.compile(pattern, flags=0)
pattern
: 一个字符串形式的正则表达式flags
可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.IGNORECASE
或 re.I
- 使匹配对大小写不敏感re.L
表示特殊字符集 \w, \W, \b, \B, \s, \S
依赖于当前环境re.MULTILINE
或 re.M
- 多行模式,改变 ^
和 $
的行为,使它们匹配字符串的每一行的开头和结尾。re.DOTALL
或 re.S
- 使 .
匹配包括换行符在内的任意字符。re.ASCII
- 使 \w, \W, \b, \B, \d, \D, \s, \S
仅匹配 ASCII
字符。re.VERBOSE
或 re.X
- 忽略空格和注释,可以更清晰地组织复杂的正则表达式。这些标志可以单独使用,也可以通过按位或(|)
组合使用。例如,re.IGNORECASE | re.MULTILINE
表示同时启用忽略大小写和多行模式。
返回:re.Pattern
对象
使用案例
# 预编译邮箱验证正则
email_re = re.compile(
r'''(
[\w\.-]+ # 用户名
@
[\w\.-]+ # 域名
\.
[a-zA-Z]{2,4} # 顶级域名
)''', re.VERBOSE)
# 复用编译对象
valid = email_re.match('[email protected]') is not None # True
案例调用match
匹配成功时返回一个 Match
对象,其中:
group([group1, …])
方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group()
或 group(0)
;start([group])
方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0
;end([group])
方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0
;span([group])
方法返回 (start(group), end(group))
。re.findall(pattern, string, flags=0)
特点:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
^注意: match 和 search 是匹配一次 findall 匹配所有。
参数说明
pattern
匹配模式。string
待匹配的字符串。pos
可选参数,指定字符串的起始位置,默认为 0。endpos
可选参数,指定字符串的结束位置,默认为字符串的长度。返回值
使用案例
# 提取所有数字
numbers = re.findall(r'\d+', 'A1B23C456')
print(numbers) # ['1','23','456']
# 分组提取日期成分
dates = re.findall(r'(\d{4})-(\d{2})-(\d{2})', '2023-08-01, 2025-03-15')
print(dates) # [('2023','08','01'), ('2025', '03', '15')]
re.finditer(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
返回值: callable_iterator
对象
使用案例
# 处理100MB日志文件
with open('server.log') as f:
for match in re.finditer(r'$$(ERROR|WARN)$$.*?(req_id=\w+)', f.read()):
level = match.group(1)
req_id = match.group(2)
print(f"{level}报警:{req_id}")
re.split(pattern, string, maxsplit=0, flags=0)
特点
参数说明
参数 | 描述 |
---|---|
pattern |
匹配的正则表达式 |
string |
要匹配的字符串。 |
maxsplit |
分割次数,maxsplit=1 分割一次,默认为 0,不限制次数。 |
flags |
标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
# 复杂分隔符分割
text = "apple, banana;cherry|orange"
parts = re.split(r'[,;|]\s*', text) # ['apple','banana','cherry','orange']
# 带保留分隔符的分割
re.split(r'([,;])', 'a,b;c') # ['a', ',', 'b', ';', 'c']
# 控制分割次数
re.split(r'\d+', 'a1b22c333d', maxsplit=2) # ['a','b','c333d']
log_pattern = re.compile(r'''
(?P, re.VERBOSE)
for log in open('app.log'):
if (match := log_pattern.search(log)):
print(f"{match.group('time')} [{match.group('level')}]",
f"{match.group('module')}:{match.group('line')}",
match.group('msg'))
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。
以下标志可以单独使用,也可以通过按位或(|)
组合使用。例如:re.IGNORECASE | re.MULTILINE
表示同时启用忽略大小写和多行模式。
.*?
可避免意外匹配re.escape()
处理动态输入完整API文档:Python re模块官方文档
模块 | 功能说明 |
---|---|
用户管理 | 1. 注册登录 2. 权限控制 3. 资料修改 |
订单系统 |
|