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

Python正则如何匹配括号前文本 按时间戳拆分对话块

正则拆分带时间区间标记对话块方案

原有规则问题

你之前写的正则\(\d*-\d*\)\s*\w*:\s*仅覆盖了「时间区间+说话人前缀」部分,没有定义后续对话内容的匹配规则,也没有设置“匹配到下一个时间区间即终止”的边界逻辑,因此无法捕获完整对话块。

可用正则规则

直接提取完整对话块

使用以下正则可以直接匹配得到每个以时间区间开头、截止到下一个时间区间前的独立对话块:

\(\d+-\d+\)[\s\S]*?(?=\(\d+-\d+\)|$)

规则各部分逻辑:

  • \(\d+-\d+\):锚定块开头的(数字-数字)格式时间区间,将原规则的*替换为+可避免匹配空括号的异常场景
  • [\s\S]*?:非贪婪模式匹配任意字符(包含换行、特殊符号),对应时间前缀后的所有对话内容,非贪婪配置保证匹配不会跨块
  • (?=\(\d+-\d+\)|$):零宽正向断言,当匹配到下一个时间区间开头、或者文本末尾时立即终止当前块的匹配,不会吞掉下一个对话块的时间标记

拆分字段版正则

如果需要把每个对话块拆成「时间区间、说话人、对话内容」三个独立字段,可以使用带捕获组的版本:

(\(\d+-\d+\))\s*(\w+):\s*([\s\S]*?)(?=\(\d+-\d+\)|$)

三个捕获组依次对应:

  1. 时间区间标记
  2. 说话人标识(比如Agent、User)
  3. 具体对话内容

使用注意事项

  • 上述正则里的[\s\S]写法天然支持匹配换行符,不需要额外开启单行(dotAll)匹配模式,适配绝大多数编程语言的正则引擎
  • 不要把非贪婪匹配符*?改成贪婪匹配*,否则会从第一个时间标记直接匹配到整个文本末尾,导致拆分失效
  • 如果你的时间区间里包含小数、毫秒等非纯整数内容,把规则里的\d+替换成对应匹配规则即可,比如匹配带小数的时间可以改成[\d.]+

匹配效果示例

针对测试文本:

(1-4) Agent: 您好,请问有什么可以帮您?
(5-12) User: 我上周买的耳机现在连不上蓝牙了
(13-25) Agent: 您可以先长按电源键10秒重置后再尝试配对

匹配后会得到3个独立对话块,完全符合“块以时间区间括号开头,内容截止到下一个时间区间之前”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:30:10