re.compile预编译与分组命名的高级用法
请说明re.compile()的作用和优势,并演示命名分组(?P<name>...)的用法,包括如何通过groupdict()提取分组结果。
回答
小字辈
re.compile(pattern, flags)将正则表达式模式预编译为Pattern对象,优势:
- 性能提升:同一模式重复使用时,避免每次重新编译
- 代码可读性:模式定义与使用分离,可给编译后的对象命名
- 复用方法:返回的Pattern对象提供
.match()、.search()等所有方法
命名分组语法:(?P<name>pattern)
示例:
import re
pattern = re.compile(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})')
match = pattern.search('今天日期是2024-03-15')
if match:
print(match.group('year')) # '2024'
print(match.groups()) # ('2024', '03', '15')
print(match.groupdict()) # {'year': '2024', 'month': '03', 'day': '15'}
groupdict()返回字典,非常适合后续按名称访问捕获组。使用flags=re.IGNORECASE等参数可控制匹配行为。