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

如何从长文本中用正则提取`says to`后到时间戳前的指定内容

正确实现代码

首先清理输入中的HTML标签,再通过正则匹配目标内容:

import re
from html import unescape

# 清除字符串中的HTML标签
def remove_html_tags(text):
    clean_rule = re.compile('<.*?>')
    return re.sub(clean_rule, '', text)

# 预处理原始字符串
cleaned_string = remove_html_tags(unescape(string))

# 正则匹配目标内容
match_pattern = r'says to\s*(.*?)(?=\s*\(\d{4}-\d{2}-\d{2}|\s*---|\s*\*\*\*|$)'
text = re.findall(match_pattern, cleaned_string, flags=re.DOTALL)

# 清理每条结果的多余换行、空白
text = [re.sub(r'\s+', ' ', item.strip()) for item in text if item.strip()]

运行后得到的text数组即可符合需求。

原写法错误说明

  1. 存在语法错误:正则末尾的左括号没有配对,运行会直接抛出正则语法异常
  2. 匹配规则错误:\D只会匹配非数字字符,但目标内容包含-5、0等数字,会直接截断匹配结果
  3. 缺少终止匹配逻辑:没有设置到下一个时间戳就停止匹配的规则,也没有适配跨行场景,无法正确提取跨多行的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:03