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 从字符串中删除除第一个之外的所有点