regexp_replace 上的函数导致 Postgres

Functions on regexp_replace result in Postgres

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

我有以下正则表达式:

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

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

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

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

您需要的是将模式 CAPITAL-space 替换为 CAPITAL,但前提是后跟另一个不是较长单词开头的大写字母。换句话说:您需要 negative lookahead 并且如果模式匹配,则仅替换 替换字符串的第一个原子:

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

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