我们一直在字符串列上调试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。
一些观察:
- ilike函数似乎没有受到这个问题的影响
select 'looking for a n keyword' ilike '%keyword%'
-> True
ilike和regexp_like的实现方式不同,这可以解释为什么一个可以工作,而另一个不能工作。
- (编程(解决方法是去掉所有换行符
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通配符。与换行符不匹配。