Python re 模块常用方法总结

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)能显著优化性能

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容