regexp_replace上的函数导致Postgres

时间:2015-11-20 09:57:16

标签: regex postgresql string-function

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

  • 'A V C Welding'应为'AVC Welding'
  • 'H S B C'应为'汇丰'
  • 等。

我有以下正则表达式:

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

replace('\&',' ','')根本没有任何效果,我只是得到相同的字符串。我尝试了其他功能,例如lower('\&')并且这些似乎都没有按预期工作。与||连接确实有效。我试过施放'\&'发短信,试过replace('' || '\&' || '',' ','') - 仍然没有快乐。

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

1 个答案:

答案 0 :(得分:1)

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

你需要的是用CAPITAL-space替换模式CAPITAL,但只有当后面跟着另一个不是更长词的开头的大写时。换句话说:你需要一个否定前瞻,如果模式匹配,那么只替换 替换字符串的第一个原子:

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

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