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

如何用正则从带时间戳的聊天字符串中提取says to后到时间戳前的文本

实现方案

你写的正则失效主要有两个原因:

  • 没有兼容says和to之间可能存在多个空格的情况(你的样本里就有says to的写法)
  • 没有把HTML标签作为结束边界,仅用换行、时间戳判断结束,和实际样本结构不符

你可以用更简单的匹配逻辑实现需求:先定位到says to片段,捕获后续所有不是<的字符(自动截止到下一个HTML标签前),再对捕获结果做空白规整即可,代码如下:

import re

# 你的原始聊天字符串
string = """ (2021-07-04 11:58:43 PM BST)<br />
---   len (Tradition ) says to sen Hi yohan</p>
<p>(2021-07-05 12:04:42 AM BST)<br />
---   len (Tradition) says to yohan   okay -5 / 0  .</p>
<p>(2021-07-04 11:47:14 PM BST)<br />
---   Ke Ch says to Hano   hello</p>
<p>(2021-07-05 12:09:41 AM BST)<br />
---   len says  to yohan sen   yes -5 / 0 TN -- / +2.5</p>
<hr />
<hr />
Processed by wokl Archive for son malab | 2021-07-05 12:26:44 AM
BST  
---"""

# 提取核心内容
raw_res = re.findall(r'says\s+to\s+([^<]+)', string)
# 规整空格,去除首尾空白、合并中间多个空格
final_res = [' '.join(item.strip().split()) for item in raw_res]

print(final_res)

运行输出:

['sen Hi yohan', 'yohan okay -5 / 0 .', 'Hano hello', 'yohan sen yes -5 / 0 TN -- / +2.5']

如果需要和你给出的预期输出完全对齐,只需要调整捕获组的边界规则,裁剪掉不需要的前后部分即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:03