Python正则匹配:如何批量获取指定命名分组的匹配结果?
批量提取正则命名分组匹配结果的实现方法
Python 的 re 模块没有原生的 group_all() 方法,但可以借助 match.groupdict() 配合简单的推导式,轻松实现批量提取指定命名分组的需求:
先定义包含命名分组的正则表达式(适配你的操作语句场景):
import re # 示例正则,可根据实际语句格式调整 pattern = r'(?P<operation>ADD|SEARCH|REMOVE)\s+(?P<id>\d+)?\s*(?P<title>[^,]+)?(?:,\s*(?P<author>.+))?'封装一个工具函数,传入匹配对象和需要提取的分组名称数组,批量返回结果:
def extract_specified_groups(match, target_groups): if not match: return None # 获取所有命名分组的键值对字典 all_groups = match.groupdict() # 筛选出指定分组的结果 return {group: all_groups.get(group) for group in target_groups} # 示例调用 test_sentence = "ADD 456 数据结构与算法, 李四" match_obj = re.match(pattern, test_sentence) result = extract_specified_groups(match_obj, ['operation', 'id', 'title', 'author']) print(result) # 输出:{'operation': 'ADD', 'id': '456', 'title': '数据结构与算法', 'author': '李四'}如果需要直接返回值的列表而非字典,用列表推导即可:
result_list = [match_obj.group(group) for group in ['operation', 'id', 'title', 'author'] if match_obj]
内容的提问来源于stack exchange,提问作者nluizsoliveira
相关产品推荐
相关产品推荐

