Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]

Posted

技术标签:

【中文标题】Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]【英文标题】:Regexp_replace : Remove dupliactes from '+' dilimited string in Oracle [duplicate] 【发布时间】:2017-10-30 13:30:35 【问题描述】:

我在表格列中有一个字符串,由“+”分隔。我需要删除重复项。

插图:

我的数据:

a+a+a+b+b+c+c

期望:

a+b+c

我尝试使用REGEXP_REPLACE,但无法逃脱+ 字符,因为它是保留的。

我在comma 分隔值方面取得了成功,但在+? 分隔值方面需要帮助。

带有comma 分隔值的工作代码:

SELECT REGEXP_REPLACE ('a,a,a,b,b,c,c', '([^,]+)(,\1)+', '\1') FROM DUAL;

【问题讨论】:

你试过转义+吗?比如:('a+a+a+b+b+c+c', '([^\+]+)(+\1)+', '\1') @marco 你忘了逗号:([^\+]+)(\+\1)+ 谢谢保罗,我已经更正了 工作.. 谢谢:) 当重复项不连续时,此正则表达式不起作用。如果您有ba+a,它也不起作用,因为它将匹配ba 中的a 并删除应该保留的唯一a 术语。 【参考方案1】:

如果您需要使用保留字符作为其正常值,则需要使用反斜杠对其进行转义。这适用于所有保留字符。

\

您可以通过将正则表达式中的每个逗号替换为...来修改现有代码

\+

例如:

SELECT REGEXP_REPLACE('a+a+a+b+b+c+c', '([^\+]+)(\+\1)+', '\1') FROM DUAL;

【讨论】:

a+b+a+b+c+b+a+c 怎么样?或ba+a?【参考方案2】:

只需转义+:

 SELECT REGEXP_REPLACE ('a+a+a+b+b+c+c', '([^\+]+)(\+\1)+', '\1') FROM DUAL;

【讨论】:

转义需要使用反斜杠,而不是正斜杠

以上是关于Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Oracle regexp_replace 从空格分隔列表中删除重复项? [复制]

如何在 Oracle 中使用 REGEXP_REPLACE 删除单词

试图了解oracle REGEXP_REPLACE如何工作

使用 Oracle REGEXP_REPLACE 从字符串中删除除第一个之外的所有点

如何通过 Oracle regexp_replace 中的正则表达式从逗号分隔列表中删除重复项? [复制]

如何在 edb 中使用相同的 REGEXP_REPLACE(Oracle sql)