繁体   English   中英

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

[英]How can I match strings precisely and avoid false matches?

背景-网络应用后端的javascript / dojo代码。

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

假设用户输入:

Ford Fusion, S 60, and Volks Wagen

目前,我会读为

FORDFUSIONS60VOLKSWAGEN

这样,我就可以与一系列的品牌和型号相匹配。

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

知道如何避免这些模棱两可的匹配吗?

既然这个问题被标记为 ,我想您正在寻找的是边界元字符一词

/\bS6\b/

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

/\bCC\b/i

将匹配"CC""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

我希望这很清楚。 我知道我有点无聊。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM