后台 - 网络应用后端javascript / dojo代码。
我需要将用户输入字符串与可能的车型列表进行匹配,并且我遇到了不正确匹配的挑战。
假设用户输入:
Ford Fusion, S 60, and Volks Wagen
目前,我会在
中阅读FORDFUSIONS60VOLKSWAGEN
并且在那里,我将匹配品牌和型号列表。
问题是,在这种情况下以及在许多其他情况下,您会得到"S6" (Audi) "
和"S60" (Volvo)
,或"Accord" (Honda)
或"CC" (Volkswagen)
等内容。
知道怎么可能(如果有的话)避免这些模棱两可的比赛?
答案 0 :(得分:1)
由于此问题已标记为regex,我认为您正在寻找word boundary metacharacter:
/\bS6\b/
将匹配"S6"
和"… S6 …"
,但不匹配"S60"
,就像
/\bCC\b/i
将匹配"CC"
和"cc"
,但不匹配"Accord"
。
答案 1 :(得分:0)
为了避免至少这两个例子,你首先要与较长的名字匹配(例如,对于" s60"在" s6&#34之前;"在"&#34之前&# 34; cc")如果没有匹配,则使用较短的一个。否则退出较长的一个。
如果您正在寻找最长的匹配项,您还可以检查其中一个结果名称是否包含在另一个名称中并跳过它们。
答案 2 :(得分:0)
我会这样做:
使用名称,型号和公司运行检查,如果它们追溯到相同的参考,那么您知道您有自己想要的。但是,如果您得到不同的结果,请继续尝试所有搜索结果的组合,直到它们匹配单个引用。
例如:
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
我希望这很清楚。我知道我有点蠢蠢欲动。