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

BigQuery SQL如何提取首次匹配字符后内容且不含匹配字符

BigQuery 提取字符串首个下划线后内容的实现方案

你之前用的REGEXP_EXTRACT(str, r'_.*')会返回带下划线的结果,是因为正则将匹配到的下划线本身纳入了返回范围,用下面两种方法都可以实现需求,结果完全匹配预期。

方法1:正则捕获组写法(最简洁)

BigQuery的REGEXP_EXTRACT函数支持返回正则中第一个捕获组的匹配内容,你只需要把下划线后需要提取的部分用圆括号包裹成捕获组即可,正则写法为r'_(.*)'。
示例代码:

WITH test_data AS (
  SELECT 'hello _I _ am _ 123312' AS input_str UNION ALL
  SELECT 'Nobody sa_dwdq casc_as _ 1233_12' AS input_str UNION ALL
  SELECT '_dosjadojs aod jao jdaso j' AS input_str
)
SELECT
  input_str,
  REGEXP_EXTRACT(input_str, r'_(.*)') AS output_str
FROM test_data

运行后返回的结果:

  • 原字符串hello _I _ am _ 123312提取结果为 I _ am _ 123312
  • 原字符串Nobody sa_dwdq casc_as _ 1233_12提取结果为dwdq casc_as _ 1233_12
  • 原字符串_dosjadojs aod jao jdaso j提取结果为dosjadojs aod jao jdaso j

方法2:原生字符串函数写法(性能更优)

如果不想用正则,也可以用BigQuery原生的字符串位置查找+截取函数实现,逻辑是先定位第一个下划线的位置,从该位置的下一位开始截取到字符串末尾即可,代码写法:

SUBSTR(input_str, STRPOS(input_str, '_') + 1)

这个写法的返回结果和正则写法完全一致,在处理超长字符串时性能比正则方案更好。

注意:以上两种方案默认输入字符串中至少包含1个下划线,如果你的数据中存在无下划线的字符串,可以加一层判断兼容,例如IF(STRPOS(input_str, '_') = 0, input_str, 你的提取逻辑),无下划线时可以按需返回原字符串或者空值。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:09:19