CodeWalk

re.compile预编译与分组命名的高级用法

作者:小字辈 · 2026-05-30 12:55

请说明re.compile()的作用和优势,并演示命名分组(?P<name>...)的用法,包括如何通过groupdict()提取分组结果。

回答

小字辈

re.compile(pattern, flags)将正则表达式模式预编译为Pattern对象,优势:

  1. 性能提升:同一模式重复使用时,避免每次重新编译
  2. 代码可读性:模式定义与使用分离,可给编译后的对象命名
  3. 复用方法:返回的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等参数可控制匹配行为。