请帮我 regexp_substr in snowflake

Please help me with regexp_substr in snowflake

下面的 snowflake 中是基于 >> 分隔字符串的正则表达式,但是当数据带有 space 时,它并没有这样做,我的意思是它取部分值而不是竞争值

SELECT replace(REGEXP_SUBSTR( 'test1 >> test2 >> test3','([^>]*)([[:space:]]>>[[:space:]]|$)', 1,1 ) , ' >> ','') as test;

SELECT replace(REGEXP_SUBSTR( 'test1 >> test2 >> test3','\w+([[:space:]]>>[[:space:]]|$)', 1,1) , ' >> ','') as test;

我有这样的数据 'test value >> test1 >> test2' 但是上面的正则表达式只是给出了价值,但我想要完整的 'test value' 谁能帮我解决这个问题?

为什么不使用 SPLIT 或 SPLIT_PART 函数?对于您要实现的目标,使用正则表达式似乎不必要地复杂

我假设你想拆分上面的字符串,分隔符是“>>”?

那你就可以轻松使用了

  1. 创建具有不同“部分”的数组的拆分函数(上面已经提到)https://docs.snowflake.com/en/sql-reference/functions/split.html
  2. 接收某部分的split_part函数(上面已经提到)https://docs.snowflake.com/en/sql-reference/functions/split_part.html
  3. split_to_table函数 https://docs.snowflake.com/en/sql-reference/functions/split_to_table.html

(编辑:只是想向您发送对文档的引用)

SPLIT_PART 比正则表达式更容易使用。这是给您带来麻烦的示例:

WITH X AS
(SELECT 'test value >> test1 >> test2' as string_to_split)
SELECT 
SPLIT_PART(string_to_split, ' >> ', 1)
, SPLIT_PART(string_to_split, ' >> ', 2)
, SPLIT_PART(string_to_split, ' >> ', 3)
FROM X;