如何精确匹配字符串并避免错误匹配

How can I match strings precisely and avoid false matches?

本文关键字:错误 串并 字符 何精确 字符串      更新时间:2023-09-26

后台- web应用程序后端javascript/dojo代码。

我需要将用户输入字符串匹配到可能的车辆模型列表,并且我遇到了不正确匹配的挑战。

假设用户输入:

Ford Fusion, S 60, and Volks Wagen

现在,我把它读成

FORDFUSIONS60VOLKSWAGEN

,在其中,我将匹配一个制造商和模型的列表。

问题是,在这种情况下,在许多其他情况下,你得到的是"S6" (Audi) ""S60" (Volvo),或"Accord" (Honda)"CC" (Volkswagen)

知道如何可能(如果有的话)避免这些模棱两可的匹配吗?

既然这个问题被标记为regex,我想你正在寻找词边界元字符:

/'bS6'b/

将匹配"S6""… S6 …",但不匹配"S60",就像

/'bCC'b/i

将匹配"CC""cc",但不匹配"Accord"

为了避免至少这两个例子,您首先要匹配较长的名称(例如,在"s6"之前匹配"s60",在"cc"之前匹配"accord"),如果没有匹配,则使用较短的名称。

如果要查找最长的匹配,还可以检查结果中的一个名称是否包含在另一个名称中,并跳过它们。

我是这样做的:

使用名称,型号和公司运行检查,如果它们追溯到相同的引用,那么你知道你有你想要的。但是,如果您得到不同的结果,请继续尝试所有搜索结果的组合,直到它们匹配到单个参考。

例如

:model traces back to honda and ford,number traces back to ford and bentley,company gives ford

则可以尝试list_1, list_2和list_3的组合,其中:list_1 = ['honda','ford']list_2 = ['ford','bentley']list_3 = ['ford']

然后,当你尝试所有的组合(我建议itertools.combinations),你最终会得到一个有效的结果,是常见的所有列表:ford

我希望这是清楚的。我知道我有点多嘴了。