如何在PostgreSQL中用regexp_replace仅替换括号内空格为逗号?
使用regexp_replace替换括号内空格为逗号的实现方案
核心思路
通过正则表达式的断言语法,精准定位括号()内部的空格,仅对这些空格执行替换操作,不影响括号外的内容。
不同数据库的实现代码
PostgreSQL
SELECT regexp_replace( 'Describe what you (tried and) what (you expected) to happen', '(?<=\([^)]*) (?=[^)]*\))', ',', 'g' );
(?<=\([^)]*):正向肯定断言,确保当前空格的左侧是左括号(加上任意非右括号)的字符:匹配需要替换的单个空格(?=[^)]*\)):正向肯定断言,确保当前空格的右侧是任意非右括号)的字符加上右括号)'g':全局替换标志,替换所有符合条件的空格
MySQL 8.0+
SELECT REGEXP_REPLACE( 'Describe what you (tried and) what (you expected) to happen', '(?<=\([^)]*) (?=[^)]*\))', ',', 1, 0 );
- 前三个参数与PostgreSQL一致,
1表示从字符串第1位开始匹配,0表示全局替换所有匹配项
Oracle 12c+
SELECT REGEXP_REPLACE( 'Describe what you (tried and) what (you expected) to happen', '(?<=\([^)]*) (?=[^)]*\))', ',', 1, 0 ) FROM DUAL;
- Oracle 12c及以上版本支持正向断言,语法逻辑与上述一致
执行结果
输入字符串:
"Describe what you (tried and) what (you expected) to happen"
处理后输出:
"Describe what you (tried,and) what (you,expected) to happen"
内容的提问来源于stack exchange,提问作者niko
相关产品推荐
相关产品推荐

