You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取正则表达式命名分组的名称与对应正则片段?

提取正则表达式命名分组对应的片段

给定正则表达式:

r"(?P<D>.8)(?P<foo>\d+)(?P<bar>[a-z]+)"

想要得到一个映射分组名称到对应正则片段的字典:

{'D': r'.8', 'foo': r'\d+', 'bar': r'[a-z]+'}

虽然Python的re模块里可以通过groupindex轻松获取分组名称,但并没有直接获取分组对应正则片段的内置方法,我们可以自己实现一个解析函数来解决这个问题。

解决方案

核心思路是用正则匹配命名分组的结构,提取分组名和对应的片段:

  1. 编写匹配命名分组的正则,捕获分组名和内部的正则片段
  2. 扫描目标正则字符串,整理成字典

代码示例:

import re

def get_named_group_fragments(regex_str):
    # 匹配(?P<name>fragment)结构,假设分组内无嵌套括号
    group_matcher = re.compile(r'\(\?P<(\w+)>([^()]+)\)')
    matched_groups = group_matcher.findall(regex_str)
    return {group_name: fragment for group_name, fragment in matched_groups}

# 测试示例
target_regex = r"(?P<D>.8)(?P<foo>\d+)(?P<bar>[a-z]+)"
group_dict = get_named_group_fragments(target_regex)
print(group_dict)
# 输出: {'D': '.8', 'foo': '\\d+', 'bar': '[a-z]+'}

注意事项

上述代码仅适用于无嵌套括号的命名分组。如果你的正则里存在嵌套括号(比如(?P<test>(a(b)c))),简单的正则匹配会失效,这种情况需要手动处理括号的嵌套计数,或者使用支持递归匹配的第三方库(如regex)来实现更精准的解析。

内容的提问来源于stack exchange,提问作者RobertHannah89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:54:56