.net – 比较文本并获得差异

好吧,我想比较2个字符串(版本1和版本2),并获得我可以自己转换为html的格式的差异,就像你可以在stackoverflow上查看如何编辑帖子或像svn跟踪修订版本之间的差异….

它必须是完整的托管代码库.

this JavaScript,但我需要在服务器端做它..

解决方法

我有一个类库,我会在下面发布一个链接,但我也会发布它的工作方式,以便你可以评估它是否适合你的内容.

请注意,对于我在下面说的所有内容,如果您将每个字符视为集合的元素,则可以针对任何类型的内容实现下面描述的算法.无论是字符串的字符,文本行,ORM对象的集合.

整个算法围绕longest-common-substring(LCS),是一种递归方法.

首先,算法试图找到两者之间的LCS.这将是两个版本之间保持不变/相同的最长部分.然后算法将这两个部分视为“对齐”.

例如,以下是两个示例字符串的对齐方式:

This long text has some text in the middle that will be found by LCS
This extra long text has some text in the middle that should be found by LCS
          ^-------- longest common substring --------^

然后它递归地将自身应用于对齐部分之前的部分,以及之后的部分.

最终的“结果”看起来像这样(我使用下划线表示其中一个字符串中的“not there”部分):

This ______long text has some text in the middle that ______will be found by LCS
This extra long text has some text in the middle that should____ be found by LCS

然后,作为递归方法的一部分,每个级别的递归调用将返回一个“操作”集合,这些操作基于是否存在LCS或任一部分中缺少部分,将按如下方式吐出:

>如果是LCS,那么它就是“复制”操作
>如果从第一个缺失,则它是“插入”操作
>如果从第二个丢失,那么这是一个“删除”操作

所以上面的文字是:

>复制5个字符(本)
>插入extra_(显然代码块在这里删除空格,下划线是空格)
>复制43个字符(长文本中间有一些文本_)
>插入应该
>删除4个字符(将)
>复制16个字符(LCS发现_be)

该算法的核心非常简单,如果您愿意,在上述文本中,您应该能够自己实现它.

我的类库中有一些额外的功能,特别是处理类似于已更改文本的内容,这样您不仅可以获取删除或插入操作,还可以修改操作,这一点非常重要.你正在比较一些东西,比如文本文件中的行.

类库可以在这里找到:DiffLib on CodePlex,你也可以在Nuget上找到它,以便在Visual Studio 2010中轻松安装.它是用C#编写的.NET 3.5及更高版本,所以它适用于.NET 3.5和4.0,以及因为它是一个二进制版本(所有源代码都在CodePlex上),你也可以在VB.NET中使用它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这...
Some samples are below for ASP.Net web form controls:(from http://www.visualize.uk.com/resources/asp
问题描述: 对于未定义为 System.String 的列,唯一有效的值是(引发异常)。 For columns not defined as System.String, the only vali
最近用到了CalendarExtender,结果不知道为什么发生了错位,如图在Google和百度上找了很久,中文的文章里面似乎只提到了如何本地化(就是显示中文的月份)以及怎么解决被下拉框挡住的问题,谈
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence changed a lot since 1.1. Here is the order: App
静态声明: ' Style="position: relative" AppendDataBoundItems="True"> (无 或 空 或
以下内容是从网络上搜集资料,然后整理而来的。不当之处,请不吝指教。(The following were from network, and edited by myself. Thanks in a
Imports System Imports System.Reflection Namespace DotNetNuke '*********************************
Ok so you have all seen them: “8 million tools for web development”, “5 gagillion tools that if you
以下内容来源于: http://blog.csdn.net/cuike519/archive/2005/09/27/490316.aspx 问:为什么Session在有些机器上偶尔会丢失? 答:可能和
以下文章提到可以用“http://localhost/MyWebApp/WebAdmin.axd”管理站点: ---------------------------------------------
Visual Studio 2005 IDE相关的11个提高开发效率的技巧 英文原创来源于: http://www.chinhdo.com/chinh/blog/20070920/top-11-vis
C#日期格式化 from: http://51xingfu.blog.51cto.com/219185/46222 日期转化一 为了达到不同的显示效果有时,我们需要对时间进行转化,默认格式为:2007
from: http://www.nikhilk.net/UpdateControls.aspx Two controls that go along with the UpdatePanel and
Open the report in the Designer. In the ToolBox, select/expand the "Report Items" section.
from: http://drupal.org/node/75844 Do this: find which TinyMCE theme you are using. For the sake of
asp.net中给用户控件添加自定义事件 用户控件中定义好代理和事件: public delegate void ItemSavedDelegate(object sender, EventArgs
在Windows版本的Safari中浏览以下的页面。 http://www.asp.net/AJAX/Control-Toolkit/Live/Calendar/Calendar.aspx Calen
http://aspnet.4guysfromrolla.com/articles/021506-1.aspx By Scott Mitchell Introduction When creating