单行代码的差异比较

10

我找到的所有diff工具都只是逐行比较而不是逐字符比较。是否有任何库可以提供单行字符串的详细信息?也许还有一个百分比差异,不过我猜可能有单独的函数处理这个问题?


1
这不是 https://dev59.com/W3I-5IYBdhLWcg3wsKv9 的重复吗? - Aleksandr Levchuk
4个回答

5

这个算法是逐字逐句进行比较的:

http://github.com/paulgb/simplediff

在Python和PHP中都有实现,甚至可以使用<ins><del>标签输出HTML格式的结果。


好的,但空格也很重要。用空格替换的制表符会产生差异,这一点不会被捕捉到。 - Tor Valamo
源代码看起来足够简单。您可以轻松更改它以在空字符串上拆分,而不是在空格上,这样您就可以逐个字符地进行差异比较。 - slebetman
实际上这个很棒,直接将字符串传递给diff()而不是通过stringDiff()。在Python中,字符串是序列,因此可以很好地按字符处理。函数的输出也很容易处理。我在想查找最大公共子串的开销,当每个项只有一个字符时...虽然我可能误解了代码... - Tor Valamo

4

最近我也在寻找类似的东西,发现了wdiff。它是基于单词操作的,而不是字符,但这是否接近你所需要的呢?


好的,但空格也很重要。如果用空格替换制表符,则会产生差异,这是无法通过(按空格拆分)检测出来的。 - Tor Valamo
@lhf,它是被放弃了还是已经没有太多可以改进的地方了? - Aleksandr Levchuk
2
@Aleksandr,我现在看到了,在我发表评论后不久,wdiff就被重新启用了。请参见http://ftp.gnu.org/gnu/wdiff/。 - lhf
@lhf,不错!16年没有开发,现在又回到了游戏中。 - Aleksandr Levchuk

3
你可以尝试将两个字符串逐个字符分成行,然后使用差异比较(diff)。这是一种不太正规的方法,但至少它应该能够工作,并且很容易实现。
或者,你可以在Python中将字符串拆分为字符列表,然后使用difflib。请参考Python difflib reference

我考虑了一下,这似乎是目前最好的选择。我也考虑过查看行差异工具,并尝试将其视为行而不是字符...但我想先确认一下。 - Tor Valamo
可以轻松地完成 diff <(cat file1 | tr " " "\n") <(cat fil2 | tr " " "\n"),但问题是输出格式很差。最好使用 wdiff file1 file2。感谢 @Michael Williamson 的回答。 - Aleksandr Levchuk
这是一个逐字符版本的命令:diff <(cat a1 | sed 's/./\0\n/'g) <(cat a2 | sed 's/./\0\n/'g) - Aleksandr Levchuk

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接