【问题标题】:Finding strings between dashes using REGEXP_EXTRACT in Bigquery在 Bigquery 中使用 REGEXP_EXTRACT 查找破折号之间的字符串
【发布时间】:2019-12-10 19:55:47
【问题描述】:

在 Bigquery 中,我试图找到一种方法来根据字符串前面有多少破折号来提取字符串的特定段。字符串中的总破折号数将始终相同。例如,我可以在以下字符串中查找第二个破折号之后和第三个破折号之前的字符串:

abc-defgh-hij-kl-mnop

目前,我正在使用以下正则表达式进行提取,它从后面计算破折号:

([^-]+)(?:-[^-]+){2}$

问题是,如果破折号之间没有任何内容,则正则表达式不起作用。例如,这样的事情返回 null

abc-defgh-hij--mnop

有没有办法使用正则表达式在一定数量的破折号之后提取字符串并在随后的破折号之前将其切断?

谢谢!

【问题讨论】:

    标签: sql regex google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    在您的情况下,最简单的方法是使用 SPLIT 和 OFFSET,如下例所示

    SELECT SPLIT(str, '-')[OFFSET(3)]   
    

    上面将返回abc-defgh-hij--mnop的空字符串

    为了防止调用不存在的元素时出错 - 最好使用 SAFE_OFFSET

    SELECT SPLIT(str, '-')[SAFE_OFFSET(3)]   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 2023-03-28
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      相关资源
      最近更新 更多