Snowflake regexp_like遇换行符返回False是否为预期行为?
Snowflake regexp_like遇换行符返回False是预期行为吗?
这是Snowflake的预期行为,原因和正则表达式的默认规则直接相关:
Snowflake的regexp_like函数默认使用的正则引擎中,.元字符不会匹配换行符(\n、\r)。所以你的正则.*keyword.*只会匹配换行符之前的内容,无法覆盖换行后的keyword,最终返回False。
解决方案
除了提前用replace移除换行符,还有更贴合正则逻辑的处理方式:
使用
s修饰符(单行模式/DOTALL)
该修饰符会让.匹配所有字符,包括换行符:select regexp_like('looking for a keyword', '.*keyword.*', 'is') -> True这里的
'is'组合了i(忽略大小写)和s(单行模式)两个修饰符。用
[\s\S]*替代.*[\s\S]表示匹配所有空白字符和非空白字符(自然包含换行),可以绕过默认的.限制:select regexp_like('looking for a keyword', '[\s\S]*keyword.*', 'i') -> True
和ilike的差异说明
ilike是通配符匹配逻辑,%通配符默认会匹配任意字符(包括换行符),所以不会出现类似问题,这是两种匹配机制的本质区别。
针对你的数据场景
由于你的数据来自Beautiful Soup解析的网页,保留了\n和\r,可以根据实际需求选择:要么用上述正则方法兼容换行,要么提前用replace(col, '\n', '')/replace(col, '\r', '')清理换行符。
内容的提问来源于stack exchange,提问作者n3rd
相关产品推荐
相关产品推荐

