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

时间:2014-09-11 03:21:07

标签: c# regex string

给出一个字符串列表:

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

给定输入字符串:

x = "Mary Brown is a nice person";

如何确定第一个字符串是大多数匹配x的字符串比其他字符串更好?

在我的情况下,我们不知道字符串会以答案开头。它也可能是中间词。它可以说"马克布朗是一个很好的人"而不是" Mary Brown是一个很好的人,而且#34; Mary Brown"仍然是最接近的比赛。

注意:答案不必使用正则表达式。我正在寻找一个C#答案。

1 个答案:

答案 0 :(得分:1)

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

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

为了获得更好的结果,可以使用this post中的字符串相似度算法替换word == input部分。