如何找回Python正则re.sub移除的文本?实现移除指定内容并获取被删句
解决Python正则移除"NOTE."及后续句子并提取移除内容的问题
原代码存在的问题
你写的正则NOTE\..*?(?=\.)有两个明显问题:
- 匹配范围只到下一个句号之前,替换后会残留原句子的句号,导致文本出现多余的
. - 没有捕获被移除的句子内容,无法生成
unique_sentences_removed列表
正确实现方案
要同时完成「移除目标内容」和「提取被移除句子」两个需求,分两步处理:
- 用正则匹配所有
NOTE.开头的完整句子,捕获其中的后续文本 - 替换掉所有匹配到的目标内容,再清理文本格式
完整代码
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
相关产品推荐
相关产品推荐

