如何在Snowflake中用正则删除指定相邻重复字符串?
解决方案
针对你的需求,可使用以下Snowflake正则替换语句实现预期效果:
SELECT REGEXP_REPLACE('ABC/DEF-GHI/GHI/IJK-LMN/GHI', '(?<=DEF-GHI)(\/GHI)+(?=\/.*\/GHI)', '') AS cleaned_text;
执行后输出结果为:'ABC/DEF-GHI/IJK-LMN/GHI'
正则逻辑说明
(?<=DEF-GHI):后向断言,限定匹配范围仅在DEF-GHI之后,避免误处理其他位置的内容(\/GHI)+:匹配一个或多个连续的/GHI,这部分就是需要删除的重复内容(?=\/.*\/GHI):正向断言,确保匹配的重复/GHI后面存在最终需要保留的/.../GHI结构,不会误删最后一个独立的GHI
你原有正则的问题
你之前的正则([A-Za-z]{3})(\/)\1存在两个核心问题:
- 未限定匹配范围,会全局匹配所有
XXX/XXX格式的重复内容,不符合仅处理DEF-GHI之后的需求 - 逻辑上是将
XXX/XXX替换为XXX,但无法区分需要保留的最后一个GHI,会误删目标内容
内容的提问来源于stack exchange,提问作者subhadra srigiriraju
相关产品推荐
相关产品推荐

