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

如何在difflib.ndiff中提取两个字符串的独有差异项?

提取difflib文本对比中两个字符串的独有差异项

你的需求很明确——用difflib对比两个字符串后,分别拿到第一个字符串相对于第二个的独有内容,以及第二个相对于第一个的独有内容。其实你的初始代码已经走对了方向,只需要在ndiff的结果基础上做个简单的分类筛选就行。

完整实现代码

我们可以遍历ndiff返回的每一行,根据行首的标记(-对应第一个文本独有,+对应第二个文本独有)来收集对应的内容:

import difflib

one = "If rents are received later than five (5)"
two = "If rents are received later than eight (8)"

# 把空格替换成换行,按单词拆分对比
n_one = one.replace(" ", "\n")
n_two = two.replace(" ", "\n")

# 生成差异对比结果
diff = difflib.ndiff(n_one.splitlines(1), n_two.splitlines(1))

# 初始化两个列表存放独有项
only_in_one = []
only_in_two = []

# 遍历每一行差异结果,分类收集
for line in diff:
    # 行首是'-',说明是第一个文本独有的内容
    if line.startswith('- '):
        # 去掉前缀和末尾的换行符,添加到列表
        only_in_one.append(line[2:].strip())
    # 行首是'+',说明是第二个文本独有的内容
    elif line.startswith('+ '):
        only_in_two.append(line[2:].strip())

print("第一个字符串的差异项:", only_in_one)
print("第二个字符串的差异项:", only_in_two)

运行结果

执行这段代码后,会得到你想要的输出:

第一个字符串的差异项: ['five', '(5)']
第二个字符串的差异项: ['eight', '(8)']

小补充

这里把空格替换成换行再用splitlines拆分,是为了让difflib按单词来对比差异。如果你的文本本身是按行区分内容的,直接用原始文本的splitlines就行,不用做空格替换哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:24:22