根据提供的数据修复字符串

本文关键字:数据修复 字符串 | 更新日期: 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更改为FirstFirstOrDefault

更新:这是另一个不忽略字母顺序的版本:

var result = words
            .FirstOrDefault(x => x.ToLower().Where(search.Contains).SequenceEqual(search));