You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用diff-match-patch实现单词级对比?求C#/后端方案

关于diff-match-patch的单词级差异对比及替代库推荐

一、diff-match-patch实现单词级对比的方法

原生diff-match-patch确实默认基于字符级计算差异,但你可以通过文本预处理模拟单词级对比,步骤如下:

  1. 用正则按单词边界拆分输入文本(保留空格、标点等分隔符,避免丢失格式信息);
  2. 用一个不会出现在文本中的特殊字符(比如\uFFFF)将拆分后的单词片段拼接成新字符串;
  3. 调用diff_main对比拼接后的字符串;
  4. 将对比结果中的特殊字符替换回原分隔符,还原为单词级差异。

示例代码:

using System.Text.RegularExpressions;
diff_match_patch dmp = new diff_match_patch();
string s1 = "Hello world this is a test";
string s2 = "Hello there this is a demo";

// 按单词边界拆分,保留分隔符
var split1 = Regex.Split(s1, @"\b");
var split2 = Regex.Split(s2, @"\b");

// 用特殊字符拼接成伪字符串
string joined1 = string.Join("\uFFFF", split1);
string joined2 = string.Join("\uFFFF", split2);

// 执行差异计算
var diffs = dmp.diff_main(joined1, joined2);

// 还原为单词级差异结果
var wordLevelDiffs = diffs.Select(d => new Diff(
    d.operation,
    d.text.Replace("\uFFFF", "")
)).ToList();

二、支持原生单词级对比的C#后端库

如果不想自己做预处理,推荐几个现成的库:

  • DiffPlex:轻量易用,原生支持字符、单词、行级差异对比,NuGet可直接安装,调用Differ.DiffWords方法即可快速获取单词级结果。
  • SharpDiff:专注文本差异计算,支持多粒度对比(含单词级),API设计清晰,适合后端业务场景。
  • Microsoft.CodeAnalysis.Differencing:若你已使用Roslyn代码分析工具,该库可通过自定义规则实现单词级差异对比,兼容性好。

内容的提问来源于stack exchange,提问作者Niranjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:32:37