如何获得两个字符串之间的变化(插入,删除或相同)

How to get the changes between two strings (insertion, deletion or same)?

本文关键字:删除 插入 变化 之间 何获得 两个 字符串      更新时间:2023-09-26

我使用Levenshtein算法的实现来获得两个字符串之间的距离,但我真正需要的是在第二个字符串中发生插入或删除或保持不变的地方(索引)?
在JavaScript(或其他c#)中有任何实现吗?

Google提供Diff Match和Patch库,其中包含健壮的算法来执行您所要求的任务。这些库可以在Java, JavaScript, Python, c++, c#, Objective-C, Lua和Dart中使用。

  1. Diff: Diff取两个文本并查找差异。这个实现以字符为单位工作。任何困难的结果都可能包含"箔条",不相关的小共性使输出复杂化。post-diff清理算法排除了这些琐碎的共性。
  2. Match: Match在较大的文本中查找模式。match的这种实现是模糊的,这意味着即使模式包含错误并且与文本中找到的内容不完全匹配,它也可以找到匹配。此实现还接受预期的位置,应该在其附近找到匹配项。候选匹配的评分基于a)模式和文本之间的拼写差异数量以及b)候选匹配与预期位置之间的距离。匹配距离参数设置这两个指标的相对重要性。
  3. Patch:两个文本可以相互区分,生成一个补丁列表。然后,这些补丁可以应用于第三个文本。如果第三个文本有自己的编辑,则此版本的补丁将在尽最大努力的基础上应用其更改,报告哪些补丁成功,哪些补丁失败。