我有一个地址数据库,其中首字母缩略词用空格分隔,我想删除这些空格,所以我转向可靠的正则表达式。但是,我正在努力在regexp结果'\&'上执行辅助功能 - 我检查了论坛和文档,但是无法让它工作。我的示例数据如下:
我有以下正则表达式:
trim(regexp_replace(organisation || ' ', '(([A-Z]\s){1}){2,}', replace('\&',' ',''), 'g'))
replace('\&',' ','')
根本没有任何效果,我只是得到相同的字符串。我尝试了其他功能,例如lower('\&')
并且这些似乎都没有按预期工作。与||连接确实有效。我试过施放'\&'发短信,试过replace('' || '\&' || '',' ','')
- 仍然没有快乐。
任何建议都会非常感激,我相信这个解决方案很简单,但我不知道下一步该去哪里!
答案 0 :(得分:1)
您尝试使用\&
所做的事情永远不会奏效。 \&
模式将替换整个模式,但您需要一个适用于各个部分的解决方案。
你需要的是用CAPITAL-space
替换模式CAPITAL
,但只有当后面跟着另一个不是更长词的开头的大写时。换句话说:你需要一个否定前瞻,如果模式匹配,那么只替换 替换字符串的第一个原子:
select regexp_replace('A V C Welding', '([A-Z]){1}(\s){1}(?![A-Z][a-z])', '\1', 'g');
如果需要,你可以用更广泛的东西替换负前瞻模式(例如没有大写字母开头,数字,标点符号等)。