如何使用 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 中删除单引号和双引号