当前位置: 首页 > 知识库问答 >
问题:

前端 - 请问是否有这样的开源的库进行文本对比,返回哪里有增删改的信息呢?

冯哲彦
2024-05-16

image.png

请问我想要对比纯文本文件的内容变化,
这个截图是在:https://tools.wujingquan.com/textdiff/
此在线工具检验的。

我想要写一个方法,或者如果现有的开源库中有方法,可以传输2个文本(两个历史版本内容),可以进行对比,返回给哪些地方(行)有增删改的信息。

请问是否有这样的开源的库呢?

共有2个答案

楚良平
2024-05-16

我用的 VSCode 插件倒是有一个 Diff
可以在 VSCode 里面以Git Diff的方式对比两个文件的差异,也可以使用 Ctrl+N 创建两个新的未保存文本去对比。
图片.png


类似的OP你截图里面的项目找到了一个 diff-checker。不过这个项目用 electron 套了一层,如果想要在网页里面使用的话,把项目里面的网页拿出来用就好了。
68747470733a2f2f692e696d6775722e636f6d2f3853436e6445432e706e67.png

齐凯康
2024-05-16

确实存在这样的开源库来进行文本对比,并返回增删改的信息。在Python中,一个非常流行的库叫做difflib,它提供了进行文本差异比较的功能。

以下是一个简单的示例,说明如何使用difflib库中的Differ类来比较两个文本字符串并返回差异:

import difflibdef compare_texts(text1, text2):    d = difflib.Differ()    diff = d.compare(text1.splitlines(keepends=True), text2.splitlines(keepends=True))    return list(diff)# 示例使用text1 = """这是第一行这是第二行这是第三行"""text2 = """这是第一行这是新增的第二行这是修改过的第三行这是第四行"""differences = compare_texts(text1, text2)for line in differences:    if line.startswith('+'):        print('新增:', line.strip('+ '))    elif line.startswith('-'):        print('删除:', line.strip('- '))    elif line.startswith(' '):        print('未变:', line.strip())    else:        print('修改:', line)

这段代码将输出每行的变化类型(新增、删除、未变或修改)。请注意,splitlines(keepends=True)用于保持原始的行结束符(如果有的话),这对于Differ类正确比较行是很重要的。

如果你需要对比的是文件而不是字符串,你可以简单地读取文件内容到字符串变量中,然后调用上述函数。

除了Python的difflib,其他编程语言通常也有类似的库或工具,例如Java中的Google Diff-Match-Patch,或者JavaScript中的diff库。

对于.NET环境,你可以使用开源库如DiffPlex,它支持.NET Framework和.NET Core,并提供了文本差异比较的功能。你可以通过NuGet安装DiffPlex,并在你的.NET项目中使用它。

总之,根据你的需求,选择适合你编程语言的文本对比库,并使用它来比较两个文本文件的内容变化。

 类似资料: