gpt4 book ai didi

regex - 雪花 match_recognize 不包括使用量词的给定模式的所有实例

转载 作者:行者123 更新时间:2023-12-05 05:33:35 26 4
gpt4 key购买 nike

我正在尝试使用 Snowflake 的 match_recognize 工具跨行匹配特定模式。该模式由 a 和 b 的任意序列组成,前提是排除了 b 的长串。在我的测试用例中,我希望允许最多 4 个 b 的运行包含在匹配中。

使用得心应手的 https://regexr.com/?2tp0k网站,我能够构建所需的正则表达式:

((ab{0,4})+a)|a+

将它应用到这个字符串:

baabbbaaaaaaaababbabbabbbabbbabbbab

我得到了这个匹配项(粗体),我很满意:

baabbbaaaaaaaababbabbabbabbbabbbab

根据需要,这会将 4 或更短的 b 的任何游程吸收到匹配中。 (它不会在字符串的开头选择 b 或在结尾的 b ,但这是预期的。)还要注意,虽然它不包含任何长时间的 b,整场比赛都会有一堆 b。

出于某种原因,当我将此正则表达式与 Snowflake 的 match_recognize 模式一起使用时,它不会占用 b 的所有短运行。

因此,它不匹配上面匹配的整个序列,而是匹配这些:

baabbbaaaaaaaababbabbabbabbbabbbab

有什么建议吗?

这是说明结果的查询:

WITH data AS (
SELECT * FROM VALUES
( 0,'b'),( 1,'a'),( 2,'a'),( 3,'b'),( 4,'b'),( 5,'b'),( 6,'a'),( 7,'a'),( 8,'a'),( 9,'a'),
(10,'a'),(11,'a'),(12,'a'),(13,'a'),(14,'b'),(15,'a'),(16,'b'),(17,'b'),(18,'a'),(19,'b'),
(20,'b'),(21,'a'),(22,'b'),(23,'b'),(24,'a'),(25,'b'),(26,'b'),(27,'b'),(28,'a'),(29,'b'),
(30,'b'),(31,'b'),(32,'a'),(33,'b')
)
SELECT * FROM data
match_recognize(
order by column1
measures
match_number() as "MATCH_NUMBER",
match_sequence_number() as msq,
classifier() as cl
all rows per match with unmatched rows
PATTERN ( ((a b{0,4})+ a) | a+ )
DEFINE
a as column2 = 'a',
b as column2 = 'b'
)
ORDER BY 1;

导致了这个结果。第 25-27 行不包含在匹配中,从第 28 行开始新的匹配。

Image of results

最佳答案

有趣的是,将模式从 ((ab{0,4})+a)|a+ 更改为 ( ((a | ab | abb | abbb | abbbb)+ a) | a+ ) 它产生:

WITH data AS (
SELECT * FROM VALUES
( 0,'b'),( 1,'a'),( 2,'a'),( 3,'b'),( 4,'b'),( 5,'b'),( 6,'a'),( 7,'a'),( 8,'a'),( 9,'a'),
(10,'a'),(11,'a'),(12,'a'),(13,'a'),(14,'b'),(15,'a'),(16,'b'),(17,'b'),(18,'a'),(19,'b'),
(20,'b'),(21,'a'),(22,'b'),(23,'b'),(24,'a'),(25,'b'),(26,'b'),(27,'b'),(28,'a'),(29,'b'),
(30,'b'),(31,'b'),(32,'a'),(33,'b')
)
SELECT * FROM data
match_recognize(
order by column1
measures
match_number() as "MATCH_NUMBER",
match_sequence_number() as msq,
classifier() as cl
all rows per match with unmatched rows
PATTERN ( ((a | ab | abb | abbb | abbbb)+ a) | a+ )
DEFINE
a as column2 = 'a',
b as column2 = 'b'
)
ORDER BY 1;

输出:

enter image description here

关于regex - 雪花 match_recognize 不包括使用量词的给定模式的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73788973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com