我在oracle论坛站点上找到了一个示例:
输入字符串:a, b, c (x, y, z), a, (xx, yy, zz), x,
WITH t AS (SELECT 'a, b, c (x, y, z), a, (xx, yy, zz), x,' col1
FROM dual)
SELECT t.col1
, REGEXP_REPLACE(t.col1, '(\(.*?\))|,', '\1') new_col
FROM t
输出:
a b c (x, y, z) a (xx, yy, zz) x
但我想与此相反。只需从
,
内部删除此字符()
并保留在外部即可。输出:
a, b, c (x y z), a, (xx yy zz), x,
最佳答案
这适用于括号内带有固定长度的参数。
REGEXP_REPLACE(t.col1, '(\(.*?),(.*?),(.*?\))', '\1\2\3') new_col
更新来自@Kobi的评论:
此正则表达式删除
,
之间的第一,可选第二和可选第三()
最多可以扩展到9(我有一个book指出\1 ...\500应该可以,但只有\1 ...\9有效)REGEXP_REPLACE(t.col1, '\(([^,]*),([^,]*),?([^,]*),?([^,]*)\)', '(\1\2\3\4)') new_col
关于sql - REGEXP_REPLACE-仅当包含在()中时,才从字符串中删除逗号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6826781/