当前位置: 首页 > news >正文

浅谈 Python 正则表达式中的 groups()

在使用 Python 进行文本解析时,正则表达式(re 模块)是最常用的工具之一。尤其是在智能体(Agent)开发、日志分析、命令解析等场景中,我们常常需要通过正则捕获一段字符串的不同部分。

其中,Match 对象的 groups() 方法 是一个非常实用的接口,可以一次性获取所有括号捕获到的内容。本文将通过一个具体示例,讲解 groups() 的作用与用法。


1. 基础概念

在 Python 的 re 模块中:

  • group(n):返回第 n 个括号捕获的内容(n 从 1 开始)。
  • groups():返回一个 元组(tuple),里面包含了所有括号捕获的结果。

例如:

import repattern = re.compile(r"(\d+)-(\d+)")
m = pattern.match("123-456")print(m.group(1))   # 123
print(m.group(2))   # 456
print(m.groups())   # ('123', '456')

这里 ( \d+ )( \d+ ) 分别捕获了 "123""456"groups() 会把它们打包成 ('123', '456')。【针对常用的正则表达式,可参考:正则表达式中的各种元素】


2. 实际应用场景:解析智能体的动作指令

假设我们在实现一个 ReAct 风格的智能体,大模型会输出类似这样的内容:

Action: wikipedia: India

这里包含三个部分:

  • 固定前缀:Action:
  • 工具名:wikipedia
  • 工具输入:India

我们希望用正则把它拆开,分别提取出工具名和输入。

定义正则表达式:

import reaction_re = re.compile(r"^Action: (\w+): (.*)$")

解释:

  • ^Action: → 匹配开头的 Action:
  • (\w+)第 1 个捕获组,提取工具名(字母、数字、下划线)
  • : → 固定的冒号
  • (.*)第 2 个捕获组,提取工具输入(任意字符)
  • $ → 行尾

3. 匹配与 groups() 输出

text = "Action: wikipedia: India"
m = action_re.match(text)print("完整匹配:", m.group(0))   # Action: wikipedia: India
print("group(1):", m.group(1))  # wikipedia
print("group(2):", m.group(2))  # India
print("groups():", m.groups())  # ('wikipedia', 'India')

输出结果:

完整匹配: Action: wikipedia: India
group(1): wikipedia
group(2): India
groups(): ('wikipedia', 'India')

在实际代码中,可以直接用 解构赋值

action, action_input = m.groups()
print(action)       # wikipedia
print(action_input) # India

4. 直观图解

匹配过程可以用下图表示:

Action: wikipedia: India|-------|   |----|group(1)   group(2)
  • group(1) = "wikipedia"
  • group(2) = "India"
  • groups() = ("wikipedia", "India")

5. 总结

  • group(n):获取第 n 个括号捕获内容。
  • groups():一次性返回所有捕获组结果,打包成元组。
  • 在智能体应用中,groups() 非常适合解析大模型输出的 Action 指令,可以快速拆分出 工具名输入参数,方便后续调用对应的工具函数。

掌握 groups(),就能够方便地写出更加简洁、清晰的解析逻辑,从而为构建智能体、命令解析器、日志处理程序打下坚实的基础。

http://www.lryc.cn/news/624357.html

相关文章:

  • GitLab 安全漏洞 CVE-2025-7739 解决方案
  • GitLab 安全漏洞 CVE-2025-6186 解决方案
  • Mind GPT:理想汽车发布的多模态大模型
  • Day119 持续集成docker+jenkins
  • 汽车企业顾客满意度调查:全周期反馈解码方案(市场调研实践)
  • Unity引擎播放HLS自适应码率流媒体视频
  • Hi3519DV500 AIISP源码分享 臻全彩 黑光全彩摄像机源码
  • python的课外学习生活活动系统
  • JavaWeb 获取应用根路径的全面指南
  • 深度学习 --- 基于MobileNetV3 实现的花卉识别
  • C 语言数据结构与算法的复杂度分析:从理论到实战的效率衡量指南
  • OCR技术全景解析:从传统模板到认知智能的跃迁
  • 8 文本分析
  • JavaSE——高级篇
  • Django 请求生命周期
  • 网络间的通用语言TCP/IP-网络中的通用规则2
  • QNX 性能分析工具(hogs pidin tracelogger)
  • 规避(EDR)安全检测--避免二进制文件落地
  • django+Vue3实现前后端分离式实时聊天室
  • linux应用软件编程:线程
  • 【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
  • 【Java基础】反射,注解,异常,Java8新特性,object类-详细介绍
  • 鸿蒙中应用框架和应用模型
  • 【P18 3-10】OpenCV Python—— 鼠标控制,鼠标回调函数(鼠标移动、按下、。。。),鼠标绘制基本图形(直线、圆、矩形)
  • CVPR 2025|英伟达联合牛津大学提出面向3D医学成像的统一分割基础模型
  • rust 从入门到精通之变量和常量
  • 视觉语言导航(14)——VLN ON ROBOTIC 4.4
  • 多线程初阶-线程安全 (面试和工作的重点!!!)
  • Gartner发布2025年AI与网络安全成熟度曲线:用AI增强网络安全计划的27项技术与创新
  • 猫头虎AI分享|一款智能量化交易系统:QuantCell,从数据收集到策略执行全流程自动化