如何精确匹配字符串并避免错误匹配
How can I match strings precisely and avoid false matches?
后台- 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
我希望这是清楚的。我知道我有点多嘴了。
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- 节点分叉子进程并获取它's错误
- 角度过滤器可以工作,但将输入视为未定义并抛出错误
- 如何将返回的路由对象串行化并本地存储在传单路由机中
- $http GET URL更改并查找错误的资源
- Casperjs ajax调用-waitForResource并解析错误
- SonarQube 预览模式失败,并显示 500 错误
- 为什么没有调用该函数并给我抛出错误
- 简单的jquery不起作用,并返回错误
- 从节点连接中引发错误,并在服务器错误处理程序中捕获它
- 在使用ng repeat和limit to时,jQuery中的上下文出现错误,并从tether.js获得工具提示
- 循环通过函数会导致错误,并在第一次更改时失败
- 在flex (web控件)中使用angularjs时出现跨域错误,并试图加载模板/json(本地文件)
- 如何捕获一个错误,并在数据库中保存错误细节和重定向到自定义错误页面在经典asp
- JavaScript中的game over函数错误,并返回函数
- 我如何使用format.js返回错误消息并更新我的UI
- 处理特定的404错误,并获得responseText与XDomainRequest的IE
- 成功和错误同时运行,而不是显示错误消息并保持填充字段
- 使用 Javascript 上传文件返回“访问被拒绝”错误,并>按钮<输入类型=“文件”