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

Python re.sub未生效:无法移除重复字符串问题求助

问题原因及解决方法

你的代码失效核心有两个原因:

  1. 匹配逻辑错误:你把整个duplicate的多行字符串直接塞进正则,相当于要匹配连续的三行(带换行),但old里的重复项是分散在其他行中的,自然匹配不到。
  2. 单词边界\b不适用:这些编码是纯字母数字,前后的换行符不属于单词字符,\b无法正确锚定目标内容,反而会干扰匹配。

解决方案1:修正正则匹配

先把重复项拆成单独条目,构建能匹配任意重复项整行的正则,配合多行模式实现精准替换:

import re

old = """
B07K6VMVL5
B071XQ6H38
B0B7F6Q9BH
B082KTHRBT
B0B78CWZ91
B09T8TJ65B
B09K55Z433
"""
duplicate = """
B0B78CWZ91
B09T8TJ65B
B09K55Z433
"""

# 提取有效重复条目,过滤空行
duplicate_items = [line.strip() for line in duplicate.splitlines() if line.strip()]
# 构建正则:匹配任意重复项的整行(允许前后空白),开启多行模式
pattern = re.compile(
    r'^\s*(' + '|'.join(re.escape(item) for item in duplicate_items) + r')\s*$',
    re.MULTILINE
)
# 替换重复行
final = pattern.sub('', old)
# 清理多余空行
final = '\n'.join(line for line in final.splitlines() if line.strip()) + '\n'

print(final)

解决方案2:不用正则,直接列表过滤(更直观高效)

对于这种行级别的去重,直接用集合做快速查找,再过滤行更简单:

old = """
B07K6VMVL5
B071XQ6H38
B0B7F6Q9BH
B082KTHRBT
B0B78CWZ91
B09T8TJ65B
B09K55Z433
"""
duplicate = """
B0B78CWZ91
B09T8TJ65B
B09K55Z433
"""

# 把重复项转为集合,提升查找效率
duplicate_set = {line.strip() for line in duplicate.splitlines() if line.strip()}
# 过滤掉old中属于重复集合的行
filtered_lines = [line for line in old.splitlines() if line.strip() not in duplicate_set]
# 重新拼接成字符串
final = '\n'.join(filtered_lines) + '\n'

print(final)

两种方法最终输出都会是:

B07K6VMVL5
B071XQ6H38
B0B7F6Q9BH
B082KTHRBT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:55:20