字符串差异显示更改字符的位置?

时间:2014-02-05 00:44:03

标签: ruby diff

我正在寻找一种方法来区分两个字符串并返回更改开始和结束的索引值。

我已经使用diff-lcs来找出哪些行已经改变,但我需要弄清楚哪些字符已经改变了。我需要新角色的位置,所以我可以用JavaScript处理它们,而不是实际的文本,这是大多数差异工具似乎给出的。

所以,例如,如果我有这个字符串:

The brown fox jumps over the lazy dog

并与此字符串进行比较:

The red fox jumps over the crazy dog

我希望看到类似的内容:

[[5,8],[28,33]]

这些数字是找到新字符的位置。

有谁知道我怎么做到这一点?

1 个答案:

答案 0 :(得分:1)

Google差异匹配补丁代码怎么样? https://github.com/elliotlaster/Ruby-Diff-Match-Patch

我过去曾经使用它并对结果感到满意。

取自上面链接的文件:

# Diff-ing
dmp.diff_main("Apples are a fruit.", "Bananas are also fruit.", false)
=> [[-1, "Apple"], [1, "Banana"], [0, "s are a"], [1, "lso"], [0, " fruit."]]

您只需要遍历不匹配并在相应的字符串中找到字符位置。

pos_ary = s.enum_for(:scan, /search_string/).map { regexp.last_match.begin(0) }