regexp_replace 上的函数导致 Postgres
Functions on regexp_replace result in Postgres
我有一个地址数据库,其中首字母缩略词用 space 分隔,我想删除这些 space,所以我求助于可靠的正则表达式。但是,我正在努力对正则表达式结果 '\&' 执行辅助功能 - 我已经检查了论坛和文档,但无法使其正常工作。我的示例数据如下:
- 'A V C Welding' 应该是 'AVC Welding'
- 'H S B C' 应该是 'HSBC'
- 等..
我有以下正则表达式:
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');
如果需要,您可以用更广泛的内容(例如没有大写字母开头、数字、标点符号等)替换否定前瞻模式。
我有一个地址数据库,其中首字母缩略词用 space 分隔,我想删除这些 space,所以我求助于可靠的正则表达式。但是,我正在努力对正则表达式结果 '\&' 执行辅助功能 - 我已经检查了论坛和文档,但无法使其正常工作。我的示例数据如下:
- 'A V C Welding' 应该是 'AVC Welding'
- 'H S B C' 应该是 'HSBC'
- 等..
我有以下正则表达式:
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');
如果需要,您可以用更广泛的内容(例如没有大写字母开头、数字、标点符号等)替换否定前瞻模式。