如何在Snowflake列中去除字符串内重复的带方括号单词
解决方案:Snowflake正则处理重复带方括号的单词
针对你需要保留每组重复带方括号单词中的一个并移除括号的需求,可以用单次REGEXP_REPLACE实现,无需多层嵌套替换:
SELECT REGEXP_REPLACE( txt, '(\[(\w+)\])(\s+\1)+', '\2' ) AS processed_txt FROM cte;
正则规则说明
(\[(\w+)\]):定义两个捕获组,外层捕获组1匹配完整的带方括号单词(如[num]),内层捕获组2提取括号内的核心内容(如num)(\s+\1)+:匹配后续连续出现的、与捕获组1完全相同的带括号单词,\s+匹配单词间的空格,+表示至少有一次重复- 替换目标
\2:直接引用捕获组2的内容,即去掉括号后的核心单词
效果验证
对于你的示例输入:
This sentence has [num] [num] [num] [num] and there are [num] [num] in previous string
执行后会输出符合预期的结果:
This sentence has num and there are num in previous string
对比你之前的写法,多层嵌套替换仅处理了第一个匹配项并删除了其余所有带括号单词,而这个正则会精准匹配连续重复的同内容带括号单词,每组保留一个去括号后的结果,不同位置的独立重复组(如示例中前后两组[num])会各自保留一个。
内容的提问来源于stack exchange,提问作者San Winchester
相关产品推荐
相关产品推荐

