【问题标题】:REGEXP_REPLACE to replace specific duplicated charactersREGEXP_REPLACE 替换特定的重复字符
【发布时间】:2021-07-21 02:08:30
【问题描述】:

我正在努力使用 REGEXP_REPLACE。目前我正在尝试处理类似于以下字符串的字符串:

ABC|||CDE|||||DEF||||||556|||.|.|

我想要实现的是每组只有一个管道。因此目标字符串是:

ABC|CDE|DEF|556|.|.|

这可以使用 REGEXP_REPLACE 或类似函数来完成吗?如何? 请注意,我无法控制字符串中字符的位置,并且不会有模式(例如“每五个字符就有一个管道”)。我只需要立即删除重复的管道。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    使用 REGEXP_REPLACE(value,'(\|)+','|') 。例如

    SELECT REGEXP_REPLACE('ABC|||CDE|||||DEF|||||||556||||.|.|','(\|)+','|') newval
    FROM dual
    

    【讨论】:

    • 你是救生员。谢谢。
    【解决方案2】:

    当然正则表达式更漂亮,但是 - 为了娱乐,为了表明良好的旧 REPLACE 可以完成这项工作。

    SQL> select
      2    replace(
      3      replace(
      4        replace('ABC|||CDE|||||DEF|||||||556||||.|.|',      --> input string
      5                '|',
      6                '|' || chr(9)
      7               ),
      8              chr(9) || '|'
      9             ),
     10             chr(9), '') result
     11  from dual;
    
    RESULT
    --------------------
    ABC|CDE|DEF|556|.|.|
    
    SQL>
    

    【讨论】:

    • 。 . .为什么chr(9)
    • 因为我猜输入字符串不会有它,@Gordon。可能是别的东西,例如# 或 ...
    猜你喜欢
    • 2017-03-02
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2021-12-29
    • 2012-09-25
    相关资源
    最近更新 更多