代码之家  ›  专栏  ›  技术社区  ›  tiomno

匹配红移中的连续数字regexp_replace

  •  2
  • tiomno  · 技术社区  · 7 年前

    我正在尝试删除红移字符串中的连续数字。

    '16,16,16,3,3,4,16,16,' 我想得到 '16,3,4,16,' .

    以下结构不适用于我:

    SELECT regexp_replace('16,16,16,3,3,4,16,16,', '(.+)\1{1,}', '\1');
    

    它返回的字符串完全相同。:(

    谢谢!

    2 回复  |  直到 7 年前
        1
  •  1
  •   Jon Scott    7 年前

    下面是使用红移python UDF的答案。

    create or replace function dedupstring(InputStr varChar)
      returns varchar
    stable
    as $$
        OutputStr=''
        PrevStr=''
        first=True
        for part in InputStr.split(','):
            if part <> PrevStr:
                if first:
                    OutputStr+=part
                else:
                    OutputStr+=','+part
                PrevStr=part
                first=False
        return OutputStr
    $$ language plpythonu;
    
    Select dedupstring('16,16,16,3,3,4,16,16,');
    

    返回'16,3,4,16,'

        2
  •  1
  •   Joe Harris    7 年前

    干得好。γ射线

    SELECT regexp_replace('16,16,16,3,3,4,16,16,', '([0-9]+,){2}', '$1') ;
    
     regexp_replace
    ----------------
     16,3,4,16,