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

Python中如何基于正则分割跨多行文本并保留分隔符

解决方案

可以通过非贪婪匹配+正向预查的正则表达式结合re.findall实现,既保留开头的时间戳分隔符,又能完整捕获跨多行的消息内容,无需手动合并数组。

优化后的正则与代码实现

把原正则里的.{1}替换为[-:](精准匹配冒号或横杠,避免匹配无关字符),配合非贪婪匹配和正向预查:

import re

pattern = r"\[[0-9]{2}[-:][0-9]{2}\].*?(?=\[[0-9]{2}[-:][0-9]{2}\]|$)"
text = """
 [04:29] [All] Player1 (Hecarim); tariane test +

[04:41] [All] Player1 (Hecarim); ?ariane test

[05:07] [All] Player1 (Hecarim); ?ariane test
it haha

[07-04] Player1 (Hecarim)
dddddddddddddddddddddddddddddddddddddddddddddddddddddd
[07:08] Player1 (Hecarim)
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
ddddddddddddddddddddd
 
"""
messages = re.findall(pattern, text, re.DOTALL)
# 过滤空白元素,得到干净的消息数组
messages = [msg.strip() for msg in messages if msg.strip()]
print(messages)

关键逻辑说明

  • \[[0-9]{2}[-:][0-9]{2}\]:精准匹配开头的时间戳格式([XX:XX]或[XX-XX])
  • .*?:非贪婪匹配任意字符(包括换行,因为加了re.DOTALL参数),避免过度匹配到下一条消息
  • (?=\[[0-9]{2}[-:][0-9]{2}\]|$):正向预查,指定匹配终止条件是下一个时间戳或者文本结尾,确保每条消息被完整分割

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:01:27