2

我有一个地址数据库,其中首字母缩写词用空格分隔,我想删除这些空格,所以我求助于可靠的正则表达式。但是,我正在努力对正则表达式结果 '\&' 执行辅助功能 - 我已经检查了论坛和文档,但无法使其正常工作。我拥有的示例数据如下:

  • 'AVC 焊接' 应该是 'AVC 焊接'
  • 'HSB C' 应该是 'HSBC'
  • ETC..

我有以下正则表达式:

trim(regexp_replace(organisation || ' ', '(([A-Z]\s){1}){2,}', replace('\&',' ',''), 'g'))

replace('\&',' ','')根本没有任何效果,我只是得到相同的字符串。我尝试了其他功能,例如lower('\&'),这些功能似乎都没有按预期工作。与 || 连接 但是确实有效。我尝试将 '\&' 转换为文本,尝试过replace('' || '\&' || '',' ','')- 仍然没有乐趣。

任何建议将不胜感激,我相信解决方案非常简单,但我看不出下一步该去哪里!

4

1 回答 1

1

你试图做的事情\&永远不会奏效。该\&模式将替换整个模式,但您需要一个适用于各个部分的解决方案。

您需要将模式替换为CAPITAL-spacejustCAPITAL但仅在后跟另一个不是较长单词开头的大写字母时。换句话说:你需要一个否定的前瞻,如果模式匹配,那么替换替换字符串的第一个原子:

select regexp_replace('A V C Welding', '([A-Z]){1}(\s){1}(?![A-Z][a-z])', '\1', 'g');

如果需要,您可以用更广泛的内容(例如没有大写字母开头、数字、标点符号等)替换负前瞻模式。

于 2015-11-20T12:43:49.517 回答