我试图从字符串中解析“name”和“address”。我已经编写了regex模式,它使用regex的“ungreedy/lazy”特性运行得非常好(我在regex101.com中进行了验证),但是不使用greedy。以下是我的雪花查询:
select
TRIM(REGEXP_SUBSTR(column1,'(^\\D*)((\\bP[OST]*[ .]*O[FFICE]*[ .]*B[OX]*[ .]*\\d+.*)|(\\d+.*))[,.\\s]+([a-zA-Z]{2})[,.\\s]+(\\d{5}|\\d{5}-\\d{4})$',1,1,'is',1)) as test
from values(TRIM('FIRST SECOND THIRD PO BOX 123 DUMMY XX 12345-6789'));
--请忽略regex的后半部分,因为我正在获取地区代码和邮政编码,它们工作正常。
上面的查询返回“first second third po box”,如果返回第二组,则返回“123 dummy”
我想要的是:
案例1-当我的字符串是'first second third po box 123 dummy xx 12345-6789'
第一组输出:“第一第二第三”
第二组输出:“邮箱123”
案例2-当我的字符串是'first second third fifth 123 dummy xx 12345-6789'
第一组输出:“第一第二第三第四第五”
第二组输出:“123假人”
请建议在这里解决雪花,因为它没有懒惰的功能。
如果你想在regex101中验证,请粘贴下面的代码和测试字符串。当您切换到ungreedy时,您将看到结果(^\d*)((\bp[ost][.]o[office][.]b[ox][.]\d+)|(\d+)[,.\s]+([a-za-z]{2})[,.\s]+(\d{5}{d{5}-\d{4})$
测试字符串:第一第二第三邮政信箱123 xx 12345-6789
谢谢
1条答案
按热度按时间pzfprimi1#
编写javascrip自定义项始终是一个选项,然后您可以使用您的正则表达式:
用法: