当字符串列包含行尾字符时,Snowflake regexp_like会中断



我们一直在字符串列上调试Snowflakes regexp_like/rlike函数。它开始静默失败,并且当字符串包含换行符(\n(时总是返回False。

示例:

select regexp_like('looking for a keyword', '.*keyword.*', 'i')
-> True
select regexp_like('looking for a 
keyword', '.*keyword.*', 'i')
-> False

但是,这两个表达式的计算结果都应为True。

一些观察:

  1. ilike函数似乎没有受到这个问题的影响
select 'looking for a n keyword' ilike '%keyword%'
-> True

ilike和regexp_like的实现方式不同,这可以解释为什么一个可以工作,而另一个不能工作。

  1. (编程(解决方法是去掉所有换行符
select regexp_like(replace('looking for a 
keyword','n',''), '.*keyword.*', 'i')
->True

我们从用漂亮汤解析的网站中获得了表中的字符串条目。虽然beautifulsoup删除HTML<br>换行符,但它似乎并没有删除通过\n和\r编码的换行符。在回顾中,我看到regexp可能会被换行符绊倒。

这是Snowflake特有的预期行为吗?

可以提供参数s:

select regexp_like('looking for a 
keyword', '.*keyword.*', 'is')
-- TRUE

指定正则表达式的参数:

s-启用POSIX通配符。匹配。默认情况下,禁用通配符匹配。

默认字符串是简单的c,它指定:

POSIX通配符。与换行符不匹配。

最新更新