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

如何让正则表达式替换连续重复的目标段落?

解决连续匹配目标段落的正则问题

原代码的局限在于仅能匹配单个目标行,当连续出现多个目标行时,易因匹配逻辑的疏漏导致遗漏。更可靠的处理方式是直接匹配连续的多组目标行,一次性完成替换,同时避免产生多余换行。

方案一:一次性匹配连续目标行(推荐)

通过正则匹配字符串开头或换行后的连续目标行,一次性替换为单个换行,最后清理首尾多余换行:

import re

txt = """Text text text
Keywords: text text, text. Texts
Disclosures of stuff text more texts
Stuff text text"""

# 匹配开头或换行后的连续目标行,替换为单个换行
cleaned_txt = re.sub(r"(?i)(?:^|\n)(?:(?:keyword|disclosure).*\n?)+", "\n", txt)
# 去除首尾多余的换行符
cleaned_txt = cleaned_txt.strip("\n")

print(cleaned_txt)

正则逻辑说明:

  • (?i):开启不区分大小写匹配
  • (?:^|\n):匹配字符串开头或换行(非捕获组,避免生成多余分组结果)
  • (?:(?:keyword|disclosure).*\n?)+:匹配一个或多个连续的目标行,.*匹配行内剩余内容,\n?兼容行尾有无换行的情况
  • 替换为\n:将连续的目标行块替换为单个换行,避免产生空行

方案二:全局替换后合并换行

若倾向保留原单目标行替换逻辑,可先全局替换所有单个目标行,再合并连续的换行:

import re

txt = """Text text text
Keywords: text text, text. Texts
Disclosures of stuff text more texts
Stuff text text"""

# 全局替换单个目标行
cleaned_txt = re.sub(r"(?i)(?:^|\n)(keyword|disclosure).*(\n|$)", "\n", txt)
# 合并连续换行符为单个
cleaned_txt = re.sub(r"\n+", "\n", cleaned_txt).strip("\n")

print(cleaned_txt)

两种方案最终输出均符合预期:

Text text text
Stuff text text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:42