我正在实现一个模糊查找工具,我认为我可以通过将单独的首字母折叠成一个标记来改善结果,例如“ABC Warehouse”变成了两个标记:“ABC”和“Warehouse”。
换句话说,它需要删除所有连续的独立字母数字对之间的空格(或句点)。所以这些会凝结...
- ABC仓库
- ABC仓库
但这些不会...
- AB C 仓库
- BC 仓库
我的第一个预感是使用正则表达式替换,这自然意味着我现在有两个问题而不是一个。这大致是我尝试过的,它不起作用。这是调用函数的 T-SQL 代码,该函数只是 .Net 的 Regex 方法的包装器。
它将“A B”凝聚成“AB”,然后取消“C”凝聚成对“AB”的资格,从而产生“AB C Warehouse”。(至少我认为这是正在发生的事情;我不是正则表达式内部的专家。)
master.dbo.RegexReplace(
'A B C Warehouse',
'(?<c1>(^|[^a-z0-9])[a-z0-9])[ \.](?<c2>[a-z0-9]([^a-z0-9]|$))',
'${c1}${c2}',
0 /*Case-sensitivity flag*/
)
我什至应该用正则表达式做这种事情,还是只编写一个对输入字符串进行有状态扫描并清理它的例程会更有意义?