如何让正则表达式替换连续重复的目标段落?
解决连续匹配目标段落的正则问题
原代码的局限在于仅能匹配单个目标行,当连续出现多个目标行时,易因匹配逻辑的疏漏导致遗漏。更可靠的处理方式是直接匹配连续的多组目标行,一次性完成替换,同时避免产生多余换行。
方案一:一次性匹配连续目标行(推荐)
通过正则匹配字符串开头或换行后的连续目标行,一次性替换为单个换行,最后清理首尾多余换行:
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
相关产品推荐
相关产品推荐

