Snowflake中使用regexp_replace时如何忽略括号实现替换?
Snowflake中regexp_replace忽略括号等正则特殊字符的解决办法
问题根源在于你的pattern字符串里的(is)属于正则表达式的分组语法,而非普通字符,导致正则引擎实际尝试匹配的是This is a-(不带括号的内容),和subject里的This (is) a-无法匹配,所以替换操作没有生效。
由于pattern来自业务列无法手动添加转义符,你可以用Snowflake内置的REGEXP_ESCAPE函数自动转义所有正则特殊字符(包括括号、连字符、星号等),将其转换为字面量进行匹配。
修改后的测试代码如下:
select 'This (is) a-Test' as subject, 'This (is) a-' as pattern, regexp_replace(subject, REGEXP_ESCAPE(pattern), '', 1, 1) as result;
执行后,REGEXP_ESCAPE(pattern)会把原pattern转译为This \(is\) a\-,此时正则引擎会把括号和连字符当作普通文本匹配,替换后就能得到预期的Test结果。
如果你的pattern来自业务表的列(比如pattern_col),直接对列应用该函数即可:
select subject_col, pattern_col, regexp_replace(subject_col, REGEXP_ESCAPE(pattern_col), '', 1, 1) as result from your_table;
内容的提问来源于stack exchange,提问作者Birat Bade Shrestha
相关产品推荐
相关产品推荐

