根据提供的数据修复字符串
本文关键字:数据修复 字符串 | 更新日期: 2023-09-27 17:58:10
假设我在一个充满字符串的列表中有这些项:
- 现金
- 支票
- 邮政订单
- 信用卡
- 银行转账
- 等等。。。等等…等等
我发现了一个很好的东西叫"LevensteinDiskance"。这在某种程度上起了作用。如果我键入了错误的内容,它并不总是返回正确的字符串。
我正在考虑去雷格斯队得到这个。
基本上,我想键入,例如,"chq",它应该返回"Cheque"。
我有这个代码来尝试这个,但它也不能正常工作:
foreach (string entry in lsbSuppliedData.Items)
{
entr = entry.Trim().Replace(" ", "");
regex = new Regex("^[" + inputString + "]+$", RegexOptions.IgnoreCase);
if (regex.IsMatch(inputString))
{
proposal = entry;
//break;
}
}
有人能帮我朝正确的方向走吗?我有一个清单,里面有它应该建议的项目,最多20个项目(不是很大,所以性能不是什么大问题)。
你可以试试这个:
var words = new[] { "Cash", "Cheque" ... };
string search = "chq";
var results = words
.Where(x => x.ToLower()
.Intersect(search.ToLower().Distinct()).Count() >= search.Length);
这将起作用,并忽略区分大小写以及ex的字母顺序。如果您键入cqh
,它仍然会返回Cheque
,如果您不希望发生这种情况,它需要更多的工作。此外,如果您希望获得单个结果而不是所有匹配,则可以将Where
更改为First
或FirstOrDefault
。
更新:这是另一个不忽略字母顺序的版本:
var result = words
.FirstOrDefault(x => x.ToLower().Where(search.Contains).SequenceEqual(search));