使用C#,从字符串列表中,我们如何找到与测试字符串最匹配的字符串

本文关键字:字符串 测试 列表 使用 我们 何找 | 更新日期: 2023-09-27 18:21:37

给定字符串列表:

strings[0] = "Mary Brown";
strings[1] = "Sally Green";
strings[2] = "Lucy Purple";

给定一个输入字符串:

x = "Mary Brown is a nice person";

如何确定第一个字符串是与x最匹配的字符串?

在我的情况下,还不知道字符串是否会以答案开头。它也可能是中间词。它可以说"马克·布朗是个好人",而不是"玛丽·布朗是个坏人",但"玛丽·布朗"仍然是最匹配的。

注意:答案不一定要使用Regex。我在找一个C#的答案。

使用C#,从字符串列表中,我们如何找到与测试字符串最匹配的字符串

我会按空格分隔搜索文本和输入,并找到匹配单词的计数。按计数降序排列,然后取文本。

var inputs = new[] { "Mary Brown", "Sally Green", "Lucy Purple" };
var searchText = "Mary Brown is a nice person";
var words = searchText.Split(' ');
var result = inputs.Select(text => new
    {
        MatchCount = text.Split(' ')
            .Sum(input => words.Where(word => word == input).Count()),
        Text = text
    })
    .OrderByDescending(a => a.MatchCount)
    .Select(a => a.Text)
    .DefaultIfEmpty()        
    .First();

输出:

Mary Brown

PS

为了获得更好的结果,word == input部分可以像本文中那样用字符串相似性算法代替。