在 Bigquery 中使用 REGEXP_EXTRACT 查找破折号之间的字符串

Posted

技术标签:

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

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

abc-defgh-hij-kl-mnop

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

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

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

abc-defgh-hij--mnop

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

谢谢!

【问题讨论】:

【参考方案1】:

以下是 BigQuery 标准 SQL

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

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

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

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

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

【讨论】:

以上是关于在 Bigquery 中使用 REGEXP_EXTRACT 查找破折号之间的字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 Power BI 中使用 BigQuery 重复/嵌套字段

是否可以在 aws lambda 中使用 bigquery?

BigQuery -- 在公开共享项目中使用 UDF 的问题

在 BigQuery 的查询中使用 UDF 作为列

Bigquery:在 Bigquery 中计算余额或重写 SQL 脚本

如何在 Datalab 的 api 中使用 Bigquery 中的子查询?