如何使用 REGEXP 提​​取 BigQuery 中的特定组合

Posted

技术标签:

【中文标题】如何使用 REGEXP 提​​取 BigQuery 中的特定组合【英文标题】:How to extract with REGEXP the specific combination in BigQuery 【发布时间】:2020-12-06 09:27:00 【问题描述】:

我有一个长文本,这里是它的一部分:"placement":1,"protocols":[2,3,5,6],"secure":1

我需要提取协议列表,所以结果将只有 [2,3,5,6]。

我使用的是 REGEXP_EXTRACT(text, r'"protocols":([^"]+)'),但结果总是不同:有时它只是 [2, 3,5,6] 有时需要更多:[2,3,5,6],

如何构建我的 REGEXP 以使结果始终只有括号中的列表?

【问题讨论】:

您的长文本是有效的 JSON 吗? 尝试使用"protocols":(\[[^]]+]) @Pentium10 是的,它是一个 json 如果它是有效的 JSON,请使用 JSON 函数而不是 REGEXP。 【参考方案1】:

你可以使用

REGEXP_EXTRACT(text, r'"protocols"\s*:\s*(\[[^][]+])')

见regex demo

要获取不带括号的protocols 的内容,请将分组边界向内移动一点:

REGEXP_EXTRACT(text, r'"protocols"\s*:\s*\[([^][]+)]')

见this regex demo。

详情

"protocols" - 文字文本 \s*:\s* - 用零个或多个空格括起来的冒号 \[ - 一个 [ 字符 [^][]+ - 除了[] 之外的一个或多个字符 ] - ] 字符。

【讨论】:

以上是关于如何使用 REGEXP 提​​取 BigQuery 中的特定组合的主要内容,如果未能解决你的问题,请参考以下文章

如何使 BigQuery 中的 REGEXP_SUBSTR() 函数匹配非贪婪?

Google BigQuery 使用 regexp_extract 从列中提取字符串

BigQuery 中的 REGEXP_EXTRACT - 提取整数或带小数的数字

使用 regexp_extract 从 BigQuery 中删除单引号和双引号

Google BigQuery 中的 REGEXP_EXTRACT 不返回任何结果

REGEXP_REPLACE 模式必须是 const 吗?比较 BigQuery 中的字符串