匹配Redshift中的连续数字REGEXP_REPLACE

时间:2019-01-08 03:50:05

标签: regex amazon-redshift

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

我想从'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 个答案:

答案 0 :(得分:1)

这是使用Redshift 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'

答案 1 :(得分:1)

您在这里。

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

 regexp_replace
----------------
 16,3,4,16,