求助:Snowflake POSIX BRE引擎下无前后瞻的正则提取方案
适配POSIX BRE的正则提取方案
需求明确:从文本中提取冒号(:)之后、第一个竖线(|)之前的所有字符;如果没有竖线,则提取到字符串末尾。由于POSIX BRE不支持前后瞻语法,可通过捕获组+整串匹配的方式实现,具体方案如下:
正则表达式(POSIX BRE)
^[^:]*:\([^|]*\).*
逻辑拆解
^[^:]*::匹配字符串开头到第一个冒号的全部内容(包含冒号本身)\([^|]*\):定义捕获组,匹配冒号后到第一个竖线前的所有字符;若文本无竖线,[^|]*会匹配到字符串末尾.*:匹配第一个竖线之后的所有内容(如果存在)
在Snowflake中的使用示例
利用REGEXP_SUBSTR函数提取捕获组1的内容:
SELECT REGEXP_SUBSTR('2022 CKL04 TER-PRO:CPT-REFRESH PRD|NPR', '^[^:]*:\\([^|]*\\).*', 1, 1, 'b', 1) AS extracted;
参数说明:
'b':指定使用POSIX BRE模式(Snowflake默认是ERE,需显式声明)- 最后一个
1:表示提取第一个捕获组的内容
验证所有示例均符合预期:
- 例1输入提取结果:
CPT-REFRESH PRD - 例2输入提取结果:
CPT-REFRESH PRD - 例3输入提取结果:
CPT-LEASING PRD - 例4输入提取结果:
PRODUCT - 例5输入提取结果:
MS-PRD & SVC ANNUAL
内容的提问来源于stack exchange,提问作者Ombir Rathee
相关产品推荐
相关产品推荐

