使用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#的答案。
我会按空格分隔搜索文本和输入,并找到匹配单词的计数。按计数降序排列,然后取文本。
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
部分可以像本文中那样用字符串相似性算法代替。