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

如何在C#中比较两个字符串并提取差异单词?

在C#中提取两个字符串的差异单词(忽略大小写、标点,基于存在性而非数量)

完全可以实现,核心思路是先把两个字符串处理成去重、统一大小写的单词集合,再通过集合操作找出仅在其中一个字符串中存在的单词。以下是具体实现方案:

步骤说明

  1. 字符串预处理:

    • 用正则匹配提取单词(保留单词内的撇号,比如meet's),自动忽略逗号等无关标点
    • 将所有单词转为小写,消除大小写差异
    • 转为HashSet<string>自动去重——只要单词在字符串中出现过至少一次,就视为"存在",不考虑出现次数
  2. 计算差异单词:

    • 利用集合的Except方法分别找出仅在第一个字符串、仅在第二个字符串中存在的单词
    • 合并两组结果,得到所有差异单词

代码实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

public class StringDifferenceFinder
{
    // 提取并预处理字符串中的单词,返回去重、小写的单词集合
    private static HashSet<string> GetUniqueWords(string input)
    {
        // 匹配包含字母、数字和撇号的单词,自动排除逗号等标点
        var matches = Regex.Matches(input.ToLower(), @"\b[\w']+\b");
        return new HashSet<string>(matches.Cast<Match>().Select(m => m.Value));
    }

    // 获取两个字符串的差异单词,返回List<string>
    public static List<string> GetDifferenceWords(string str1, string str2)
    {
        var words1 = GetUniqueWords(str1);
        var words2 = GetUniqueWords(str2);

        // 合并仅在str1存在和仅在str2存在的单词
        var onlyInStr1 = words1.Except(words2);
        var onlyInStr2 = words2.Except(words1);
        return onlyInStr1.Concat(onlyInStr2).ToList();
    }

    // 获取差异单词的空格分隔字符串
    public static string GetDifferenceString(string str1, string str2)
    {
        var differenceWords = GetDifferenceWords(str1, str2);
        return string.Join(" ", differenceWords);
    }

    // 测试示例
    public static void Main()
    {
        string str1 = "Cat meet's a dog";
        string str2 = "Cat meet's a dog and a bird";
        
        var differenceList = GetDifferenceWords(str1, str2);
        Console.WriteLine("差异单词列表:");
        foreach (var word in differenceList)
        {
            Console.WriteLine(word);
        }

        var differenceStr = GetDifferenceString(str1, str2);
        Console.WriteLine("\n差异单词字符串:" + differenceStr);
        // 输出结果:and bird
    }
}

关键细节说明

  • 正则表达式\b[\w']+\b确保正确匹配meet's这类包含撇号的单词,同时自动过滤逗号、句号等标点
  • HashSet的去重特性完美满足"只要双方都存在该单词(不管数量)就不算差异"的需求
  • Except方法是高效的集合差集计算方式,性能优于手动遍历比对

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:25:53