Python re 模块常用方法总结
一、正则表达式编译
△re.compile(pattern, flags=0)
将正则表达式字符串编译为 Pattern 对象,提升重复匹配效率。支持通过 flags 参数扩展功能(如 re.I 忽略大小写、re.S 允许 . 匹配换行符。例如
import re
pattern = re.compile(r'\d+', flags=re.I) # 忽略大小写的模式
二、字符串匹配与查找
△re.match(pattern, string, flags=0)
从字符串开头匹配正则表达式,成功返回 Match 对象,否则返回 None。适用于严格格式验证(如验证协议头)。例如
result = re.match(r'^http', 'http://example.com') # 匹配到 'http'
△re.search(pattern, string, flags=0)
扫描整个字符串,返回第一个匹配的子串,无匹配则返回 None。常用于提取首个符合条件的内容(如提取文本中的首个数字)。例如
match = re.search(r'\d+', 'abc100def') # 匹配到 '100'
△re.findall(pattern, string, flags=0)
返回所有匹配的子串列表,若正则包含分组则返回分组内容列表。适用于批量提取数据(如网页链接、数字序列)。例如
numbers = re.findall(r'\d+', 'a1b22c333') # 输出 ['1', '22', '333']
△re.finditer(pattern, string, flags=0)
返回匹配子串的迭代器,逐次生成 Match 对象,适用于大文本处理(节省内存)。例如
for match in re.finditer(r'\d+', 'a1b22c333'):
print(match.group()) # 依次输出 '1', '22', '333'
三、字符串操作
△re.sub(pattern, repl, string, count=0, flags=0)
将匹配的子串替换为 repl,返回新字符串。支持通过 count 限制替换次数(如敏感词过滤)。例如
text = re.sub(r'\s+', '-', 'Hello World') # 输出 'Hello-World'
△re.split(pattern, string, maxsplit=0, flags=0)
按正则表达式匹配结果分割字符串,返回列表。支持通过 maxsplit 控制分割次数(如解析结构化文本)。例如
parts = re.split(r'\d+', 'a1b2c3') # 输出 ['a', 'b', 'c', '']
四、匹配对象方法
△group() / groups()
group() 返回完整匹配的子串,或指定分组的子串。
groups() 返回所有分组的元组。
match = re.search(r'(\d+)-(\d+)', 'ID:100-200')
print(match.group(1)) # 输出 '100'
print(match.groups()) # 输出 ('100', '200')
△start() / end()
返回匹配子串在原始字符串中的起始和结束位置。例如
match = re.search(r'\d+', 'abc100def')
print(match.start(), match.end()) # 输出 3, 6
五、关键参数与技巧
△flags 功能标志位
re.I:忽略大小写。
re.S:允许 . 匹配换行符。
re.M:多行模式下 ^ 和 $ 匹配每行的开头和结尾12。
贪婪与惰性匹配
默认贪婪匹配(尽可能长),例如 .*+
使用 ? 切换为惰性匹配(尽可能短),例如 .*?
re.findall(r'a.*?b', 'a1b a2b') # 输出 ['a1b', 'a2b']
总结
re 模块的核心方法涵盖编译、匹配、提取、替换、分割等场景,结合 flags 和分组功能可灵活处理复杂文本。预编译正则表达式(compile)和迭代器(finditer)能显著优化性能