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

如何找回Python正则re.sub移除的文本?实现移除指定内容并获取被删句

解决Python正则移除"NOTE."及后续句子并提取移除内容的问题

原代码存在的问题

你写的正则NOTE\..*?(?=\.)有两个明显问题:

  • 匹配范围只到下一个句号之前,替换后会残留原句子的句号,导致文本出现多余的.
  • 没有捕获被移除的句子内容,无法生成unique_sentences_removed列表

正确实现方案

要同时完成「移除目标内容」和「提取被移除句子」两个需求,分两步处理:

  1. 用正则匹配所有NOTE.开头的完整句子,捕获其中的后续文本
  2. 替换掉所有匹配到的目标内容,再清理文本格式

完整代码

import re

text = "NOTE. This is the subsequent sentence to be removed. The weather is good. NOTE. This is another subsequent sentence to be removed. The sky is blue. Note that it's a dummy text."

# 正则模式:匹配"NOTE. "开头,直到结尾句号的完整内容,捕获后续句子部分
pattern = r"NOTE\.\s*(.*?)\."

# 提取所有被移除的句子(补回结尾的句号)
unique_sentences_removed = [f"{sentence}." for sentence in re.findall(pattern, text, re.DOTALL)]

# 移除所有匹配的内容,再清理多余空格和残留标点
clean_text = re.sub(pattern, "", text).strip()
# 合并连续空格和多余句号
clean_text = re.sub(r"\s+", " ", clean_text)
clean_text = re.sub(r"\.\s*\.", ".", clean_text)

# 输出结果
print("clean_text:")
print(clean_text)
print("\nunique_sentences_removed:")
print(unique_sentences_removed)

执行结果

  • clean_text:
    The weather is good. The sky is blue. Note that it's a dummy text.
    
  • unique_sentences_removed:
    ["This is the subsequent sentence to be removed.", "This is another subsequent sentence to be removed."]
    

关键说明

  • 正则r"NOTE\.\s*(.*?)\.":
    • NOTE\.精确匹配大写的NOTE.
    • \s*匹配NOTE.后面的任意空格
    • (.*?)非贪婪捕获后续文本,直到遇到下一个句号
    • re.DOTALL确保.能匹配换行符(如果你的文本包含换行场景)
  • 后续的两次re.sub是为了清理替换后可能出现的连续空格或重复句号,保证文本格式整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:41:12