我正在实现一个模糊查找工具,我认为我可以通过将不同的首字母折叠成一个标记来提高结果。“ABC仓库”只是两个令牌:"ABC“和”仓库“。
换句话说,它需要删除所有连续的孤立字母数字对之间的空格(或句点)。所以这些会凝结..。
但这些不会..。
我的第一个预感是使用regex替换,这自然意味着我现在有两个问题而不是一个问题。这大概是我试过的,但不起作用。这是to代码,调用的函数只是.NET的Regex方法的包装器。
它将"A - B“浓缩成"AB",从而取消"C”被浓缩成对"AB“的资格,从而产生”AB C仓库“。(至少我认为这就是正在发生的事情;我不是正则表达式内部的专家。)
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*/
)我甚至应该用正则表达式来做这种事情,还是只编写一个对输入字符串进行有状态扫描并清除它的例程就更有意义了?
发布于 2013-05-16 16:16:13
尝试以下替换:
find: (?<=\b[A-Z])[ .](?=[A-Z]\b)
replacement is an empty string.解释:
模式搜索空格或点前面有一个字母,后面跟着一个字母。这就是为什么它使用一个查找后面的(?<=...)和一个向前看的(?=...)来测试圆点或空格周围是否存在单个字母。这里使用单词边界\b来确保字母,无论是前后字母,都是单独的。由于观星不吃字符,空格或点只匹配(并替换)。
https://stackoverflow.com/questions/16592193
复制相似问题