Snowflake中使用REGEXP_REPLACE移除指定首尾子串实现HTML格式剥离
Snowflake正则替换HTML标签异常的解决方案
问题根源
Snowflake正则默认有两个特性和多数其他平台不一致,直接导致原有表达式失效:
- 元字符
.默认不匹配换行符,当HTML标签之间或标签内部存在换行时,原有非贪婪匹配逻辑会出现匹配范围偏差,最终导致文本截断或无返回 - 部分特殊空白字符会干扰
.+?的非贪婪边界判断,出现匹配异常
最优解决方案
优先使用排除字符组的写法,不需要修改正则匹配参数,兼容性更好:
REGEXP_REPLACE(originaltext, '<[^>]+>', '')
语法说明:[^>]+会匹配所有不等于>的连续字符,不受换行符限制,天然适配各种换行场景的HTML标签匹配。
兼容原有写法的调整方案
如果要保留原有非贪婪匹配的写法,需要额外追加s参数开启DOTALL模式,让.可以匹配换行符:
REGEXP_REPLACE(originaltext, '<.+?>', '', 1, 0, 's')
参数说明:
- 第4个参数
1:表示从文本第1位开始匹配 - 第5个参数
0:表示替换所有匹配到的结果 - 第6个参数
s:开启DOTALL模式,允许.匹配换行符
额外优化(可选)
如果需要去除剥离标签后产生的多余空行,可以嵌套一层正则替换连续换行:
REGEXP_REPLACE(REGEXP_REPLACE(originaltext, '<[^>]+>', ''), '\\n\\s*\\n', '\\n')
效果验证
输入示例:
<ul> <li>Text I care about 1 <li>Text I care about 2</li> <li>Text I care about 3</li> </ul>
输出结果:
Text I care about 1 Text I care about 2 Text I care about 3
内容的提问来源于stack exchange,提问作者kanderson
相关产品推荐
相关产品推荐

