【问题标题】:snowflake special character parsing issue searching for solution雪花特殊字符解析问题寻找解决方案
【发布时间】:2020-10-12 15:49:04
【问题描述】:

我有一个名为 question 的字段名称,该字段中的值是 您如何看待 ${question_1}?

我想写一个查询来选择这个值,我想它会使用正则表达式来做。以下是查询,但没有得到结果,有人可以帮助我吗?谢谢!

select question
from "<table_name>"
where question regexp '.*\s[${].*\s[}?].*';

【问题讨论】:

    标签: snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    您的正则表达式在这里显示不正确。请记住,.*.+ are greedy 等模式匹配器将匹配比您预期更多的字符类型。此外,正则表达式中的[${][}?] 括号表达式分别表示匹配$ {} ? ,这不是您打算执行的操作。

    如果您的目标只是查找符合以下格式的所有文本:

    Does every question end with a question-mark immediately after the ${variable}?
    

    那么在 Snowflake SQL 中适合它的模式可能是:

    select question
    from "<table_name>"
    where question regexp '.*\\$\\{[^${}]+\\}\\?$';
    

    注意double-backslashing\\$\\{ 等)禁止将${ 视为regular expression instructions(将它们视为简单字符),以及使用反括号表达式[^${}] 将接受除字符${} 之外的任何内容,一旦匹配器在潜在变量中进行搜索。

    末尾的额外$ 指令仅过滤始终以问号结尾的文本,如果问号不是每次都在数据中终止字符串,则可以删除。

    如果可以存在多个变量,您也可以扩展它以匹配(和/或捕获)多个变量:

    select
       question
      ,regexp_substr(question, '(\\$\\{[^${}]+\\})', 1, 1) variable_1
      ,regexp_substr(question, '(\\$\\{[^${}]+\\})', 1, 2) variable_2
    from "<table_name>"
    where question regexp '.*(\\$\\{[^${}]+\\}).*\\?.*'
    

    以上内容也将匹配问题字符串,例如:

    Does this question ${carry} two ${variables}?
    

    我建议在Regex101RegExr 等网站上构建和理解您自己的正则表达式模式interactively with a list of questions 进行测试,这样会更容易。

    【讨论】:

      猜你喜欢
      • 2022-10-24
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多