【发布时间】:2020-09-02 11:17:13
【问题描述】:
我正在寻求有关调试 REGEXP_REPLACE() 语句的帮助。
我一直在使用在线正则表达式编辑器来构建表达式,然后使用 SF regexp_* 函数来实现它们。我试图与 SF 正则表达式实现保持一致,但我看到返回的结果不一致,我希望有人能解释一下:)
我的意图是用新的分隔符 (#^#) 替换文本中的逗号(不包括带有双引号的逗号)。
示例文本字符串:
"Foreign Corporate Name Registration","99999","Valuation Research",,"Active Name",02/09/2020,"02/09/2020","NEVADA","UNITED STATES",,,"123 SOME STREET",,"MILWAUKEE","WI","53202","UNITED STATES","123 SOME STREET",,"MILWAUKEE","WI","53202","UNITED STATES",,,,,,,,,,,,
RegEx 命令和替换(在regex101.com 工作):
([("].*?["])*?(,)
\1#^#
regex101.com 结果:
"Foreign Corporate Name Registration"#^#"99999"#^#"Valuation Research"#^##^#"Active Name"#^#02/09/2020#^#"02/09/2020"#^#"NEVADA"#^#"UNITED STATES"#^##^##^#"123 SOME STREET"#^##^#"MILWAUKEE"#^#"WI"#^#"53202"#^#"UNITED STATES"#^#"123 SOME STREET"#^##^#"MILWAUKEE"#^#"WI"#^#"53202"#^#"UNITED STATES"#^##^##^##^##^##^##^##^##^##^##^##^#
当我尝试使用 REGEXP_REPLACE() 在 SF 中实现相同的逻辑时,我使用的是以下语句:
SELECT TOP 500
A.C1
,REGEXP_REPLACE((A."C1"),'([("].*?["])*?(,)','\\1#^#') AS BASE
FROM
"<Warehouse>"."<database>"."<table>" AS A
此语句返回 BASE 的结果:
"Foreign Corporate Name Registration","99999","Valuation Research",,"Active Name",02/09/2020,"02/09/2020","NEVADA","UNITED STATES",,,"123 SOME STREET",,"MILWAUKEE","WI","53202","UNITED STATES","123 SOME STREET",,"MILWAUKEE","WI","53202","UNITED STATES"#^##^##^##^##^##^##^##^##^##^##^##^#
正如您在比较结果时所看到的,SF 结果集只是替换了文本末尾的逗号。
谁能告诉我为什么 regex101.com 和 SF 之间的结果使用相同的语句返回不同的结果?我的表达是否不符合 RegEx 的 SF 实现 - 如果是,您能告诉我原因吗?
非常感谢您花时间和精力阅读本文!
周三快乐, 凯西。
【问题讨论】:
标签: snowflake-cloud-data-platform