使用正则表达式(或其他东西?)缩写首字母缩写/缩写

时间:2013-05-16 15:56:20

标签: .net regex

我正在实施一个模糊查找工具,我想我可以通过将单独的首字母缩写为单个标记来改善结果,例如“A B C仓库”变成了两个代币:“ABC”和“仓库”。

换句话说,它需要删除所有连续的隔离字母数字对之间的空格(或句点)。所以这些会凝聚......

  • A B C仓库
  • A.B.C。仓库

但这些不会......

  • AB C仓库
  • A BC Warehouse

我的第一个预感是使用正则表达式替换,这自然意味着现在我有两个问题而不是一个。这大致是我尝试过的,但是没有用。这是调用函数的T-SQL代码,它只是.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*/
)

我是否应该使用正则表达式执行此类操作,或者只编写一个对输入字符串进行状态扫描并清除它的例程会更有意义吗?

1 个答案:

答案 0 :(得分:4)

试试这个替换:

find: (?<=\b[A-Z])[ .](?=[A-Z]\b)
replacement is an empty string.

说明:

模式搜索空间或点前面有一个字母,后跟一个字母。这就是为什么它使用lookbehind (?<=...)和前瞻(?=...)来测试点或空间周围单个字母的存在。这里使用单词边界\b来确保单独前后的字母。由于外观不包含字符,因此空格或点仅匹配(并替换)。