You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery SQL中使用REGEXP_EXTRACT提取指定字符串片段

BigQuery中使用REGEXP_EXTRACT提取指定分段的实现方案

待处理示例字符串:b-12345_xx_aa_bbb_xsx-latam_jan_11_a12,目标是提取前4个下划线分隔的片段:b-12345、xx、aa、bbb。

核心正则逻辑

目标片段均为字符串开头按下划线_分割的前4个连续分段,正则匹配规则不需要考虑横杠、后续日期/版本类字符的干扰,核心匹配逻辑:

  • 从字符串起始位置开始匹配
  • 每个分段对应连续的非下划线字符,用捕获组标记
  • 分段间固定匹配下划线分隔符
  • 第四个分段后的所有剩余内容直接忽略,不做捕获

两种可直接运行的实现方式

方式1:复用同一正则提取全部分段(推荐,代码更简洁)

BigQuery的REGEXP_EXTRACT支持指定提取第几个捕获组的内容,无需为每个分段单独写正则,统一正则为^([^_]+)_([^_]+)_([^_]+)_([^_]+)_.*$,示例代码:

WITH test_data AS (
  SELECT 'b-12345_xx_aa_bbb_xsx-latam_jan_11_a12' AS raw_str
)
SELECT
  raw_str,
  REGEXP_EXTRACT(raw_str, r'^([^_]+)_([^_]+)_([^_]+)_([^_]+)_.*$', 1, 1, '', 1) AS seg1, -- 返回b-12345
  REGEXP_EXTRACT(raw_str, r'^([^_]+)_([^_]+)_([^_]+)_([^_]+)_.*$', 1, 1, '', 2) AS seg2, -- 返回xx
  REGEXP_EXTRACT(raw_str, r'^([^_]+)_([^_]+)_([^_]+)_([^_]+)_.*$', 1, 1, '', 3) AS seg3, -- 返回aa
  REGEXP_EXTRACT(raw_str, r'^([^_]+)_([^_]+)_([^_]+)_([^_]+)_.*$', 1, 1, '', 4) AS seg4  -- 返回bbb
FROM test_data

参数说明:最后一个入参为捕获组序号,传几就返回对应括号内匹配到的内容。

方式2:单字段独立正则匹配(适合仅需提取个别分段的场景)

如果不需要一次性提取4个分段,可以给每个目标写独立的短正则,逻辑更直观:

  • 提取b-12345:REGEXP_EXTRACT(raw_str, r'^([^_]+)_')
  • 提取xx:REGEXP_EXTRACT(raw_str, r'^[^_]+_([^_]+)_')
  • 提取aa:REGEXP_EXTRACT(raw_str, r'^[^_]+_[^_]+_([^_]+)_')
  • 提取bbb:REGEXP_EXTRACT(raw_str, r'^[^_]+_[^_]+_[^_]+_([^_]+)_')

匹配验证

以上两种写法都不会被后续字符串中包含的横杠、数字、下划线干扰,执行后返回的4个字段值完全匹配预期提取结果。


内容的提问来源于stack exchange,提问作者Jaffet León

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:24:58