如何比较不精确的字符串值
How to compare inexact string values
我想比较两个不精确的 string
值例如我想比较 Admin 和 Administrator,这应该 return true 或应该执行。
我试过 contain
没用
var prodcut = lstProducts.Where(i => i.Name.ToLower().Contains(appname.ToLower())).FirstOrDefault();
如果 i.Name
是 'Admin' 并且 appname.ToLower()
是 'Administrator',则以上代码不起作用。它只是 return null 但希望它应该检测值。
你把字符串搞错了(你在 Admin
中寻找 Adminstrator
)
您可以像这样双向检查:
lstProducts.Where(i =>
i.Name.ToLower().Contains(appname.ToLower()) ||
appname.ToLower().Contains(i.Name.ToLower())
).FirstOrDefault();
或者只比较前几个字符:
lstProducts.Where(i =>
i.Name.ToLower().SubString(0,5) == appname.ToLower().SubString(0,5))
).FirstOrDefault();
Fuzzy matching 实际上是一个相当复杂的主题,但是对这个主题有很多研究。
如果您想双向检查,如果 A 包含 B 或者如果 B 包含 A,您可以像这样使用 ||
operator(OR
运算符):
a.Contains(b) || b.Contains(a)
我想比较两个不精确的 string
值例如我想比较 Admin 和 Administrator,这应该 return true 或应该执行。
我试过 contain
没用
var prodcut = lstProducts.Where(i => i.Name.ToLower().Contains(appname.ToLower())).FirstOrDefault();
如果 i.Name
是 'Admin' 并且 appname.ToLower()
是 'Administrator',则以上代码不起作用。它只是 return null 但希望它应该检测值。
你把字符串搞错了(你在 Admin
中寻找 Adminstrator
)
您可以像这样双向检查:
lstProducts.Where(i =>
i.Name.ToLower().Contains(appname.ToLower()) ||
appname.ToLower().Contains(i.Name.ToLower())
).FirstOrDefault();
或者只比较前几个字符:
lstProducts.Where(i =>
i.Name.ToLower().SubString(0,5) == appname.ToLower().SubString(0,5))
).FirstOrDefault();
Fuzzy matching 实际上是一个相当复杂的主题,但是对这个主题有很多研究。
如果您想双向检查,如果 A 包含 B 或者如果 B 包含 A,您可以像这样使用 ||
operator(OR
运算符):
a.Contains(b) || b.Contains(a)