C# 如何在列表中查找最近的字符串

C# 如何在列表中查找最近的字符串,c#,regex,string,linq,equals,C#,Regex,String,Linq,Equals,如何在列表中查找最近的字符串: 还有一个类型错误: string input = "how are ytou"; 对于这两种情况,最好得到以下信息: hello how are you where are you 甚至这个结果: hello how are you where are you how much money you got 或者至少是: hello how are you 我需要它来避免在用户请求做出响应时出现最小的类型错误 一个简单的方法是使用String.Compa

如何在列表中查找最近的字符串:

还有一个类型错误:

  string input = "how are ytou";
对于这两种情况,最好得到以下信息:

hello how are you
where are you
甚至这个结果:

hello how are you
where are you
how much money you got
或者至少是:

hello how are you

我需要它来避免在用户请求做出响应时出现最小的类型错误

一个简单的方法是使用
String.Compare
获得

两个比较词之间的词汇关系

在与输入进行比较后,订购可用项目,并选择最佳匹配项

string bestMacht = list.OrderBy(s => string.Compare(s, input)).First();
这只是第一种方法,因为单词的顺序应该被忽略让我们将其改进为完整的解决方案。在分割字符串之后

string[] splittedInput = input.Split(' ');
您可以使用
IEqualityComparer
比较单个单词。您可以自由定义每个单词可能失败的字符数(在本例中为2)

私有类NearMatchComparer:IEqualityComparer
{
公共布尔等于(字符串x、字符串y)
{
返回字符串。比较(x,y)<2;
}
public int GetHashCode(字符串obj)
{
返回obj.GetHashCode();
}
}
使用此比较器,将输入的单词与词典中的单词进行比较。如果两个单词(定义为必需)匹配(无论顺序如何),请选择字符串

List<string> matches = list.Where(s => s.Split(' ')
    .Intersect(splittedInput, new NearMatchComparer()).Count() >= 2)
    .ToList();
List matches=List.Where(s=>s.Split(“”)
.Intersect(splittedInput,新的NearMatchComparer()).Count()>=2)
.ToList();

结果是一个潜在匹配的列表。

一个简单的方法是使用
字符串。比较
以获得

两个比较词之间的词汇关系

在与输入进行比较后,订购可用项目,并选择最佳匹配项

string bestMacht = list.OrderBy(s => string.Compare(s, input)).First();
这只是第一种方法,因为单词的顺序应该被忽略让我们将其改进为完整的解决方案。在分割字符串之后

string[] splittedInput = input.Split(' ');
您可以使用
IEqualityComparer
比较单个单词。您可以自由定义每个单词可能失败的字符数(在本例中为2)

私有类NearMatchComparer:IEqualityComparer
{
公共布尔等于(字符串x、字符串y)
{
返回字符串。比较(x,y)<2;
}
public int GetHashCode(字符串obj)
{
返回obj.GetHashCode();
}
}
使用此比较器,将输入的单词与词典中的单词进行比较。如果两个单词(定义为必需)匹配(无论顺序如何),请选择字符串

List<string> matches = list.Where(s => s.Split(' ')
    .Intersect(splittedInput, new NearMatchComparer()).Count() >= 2)
    .ToList();
List matches=List.Where(s=>s.Split(“”)
.Intersect(splittedInput,新的NearMatchComparer()).Count()>=2)
.ToList();

结果是一个潜在匹配的列表。

我将使用Levenshtein距离。这将为您提供字符串不同程度的值。只需选择您设置的最小距离


我会使用Levenshtein距离。这将为您提供字符串不同程度的值。只需选择您设置的最小距离


它总是关于单词中匹配字符的百分比,根据单词的顺序排列。略高于基本的正则表达式功能。@Wiktor Stribiżew editedIts总是根据单词的顺序计算单词中匹配字符的百分比。略高于基本的正则表达式功能。@Wiktor Stribiżew editedHello,所以您的输出带有
string input=“你好”是:
你好,你有多少钱,你在哪里?
string input=“你好吗”
你好
。如果我在第一个结果上使用了
OrderBy
,它就相当于自己的结果。似乎这是获得这种解决方案的结果的正确方法,即使它不等于输出,这在理论上避免了字符串中包含单个相等的单词,并且在单词和包含组合中也会出现相同的类型错误。因为我不是在要求直接的解决方案,所以我要标记它,因为它是对目标的回答,所以您的输出带有
string input=“你好”是:
你好,你有多少钱,你在哪里?
string input=“你好吗”
你好
。如果我在第一个结果上使用了
OrderBy
,它就相当于自己的结果。似乎这是获得这种解决方案的结果的正确方法,即使它不等于输出,这在理论上避免了字符串中包含单个相等的单词,并且在单词和包含组合中也会出现相同的类型错误。因为我不是在要求直接的解决方案,所以我要标记它,因为它是对目标的回答