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

如何用正则提取pos/position后数字或首个逗号前最后数字(BigQuery适用)

问题解答

1. 单正则实现方案

仅通过正则完全可以实现该需求,利用正则分支左优先匹配的特性,优先匹配pos/position后的数字,未命中时再匹配第一个逗号前的最后一个符合范围的数字即可。
适配需求的正则表达式为:
r'(?i)(?:pos(?:ition)?\s?(100|[1-9]\d?))|(?:^[^,]*?(100|[1-9]\d?)(?=\D*,))'
规则说明:

  • (?i):开启大小写不敏感匹配,适配可能出现的大写写法
  • 前半段为优先规则:匹配pos或position后可选空格跟随的1-100范围内的数字
  • 后半段为兜底规则:匹配第一个逗号前的最后一个1-100范围内的数字
  • 数字规则(100|[1-9]\d?)严格覆盖1到100的取值范围,不会匹配到0或者超过100的数值

2. BigQuery SQL实现方案

更推荐拆分逻辑实现,可读性和可维护性更强,不需要写复杂的长正则,示例代码如下:

SELECT
  -- 你的其他业务字段
  input_str,
  COALESCE(
    -- 第一步:优先提取pos/position后的目标数字
    REGEXP_EXTRACT(input_str, r'(?i)pos(?:ition)?\s?(100|[1-9]\d?)'),
    -- 第二步:提取不到时,取第一个逗号前的最后一个目标数字
    REGEXP_EXTRACT(SPLIT(input_str, ',')[SAFE_OFFSET(0)], r'(100|[1-9]\d?)\D*$')
  ) AS position
FROM `你的表名`

说明:

  • SPLIT(input_str, ',')[SAFE_OFFSET(0)] 直接截取第一个逗号之前的所有内容,避免正则匹配逗号的边界问题
  • COALESCE 函数会按顺序返回第一个非空的结果,刚好适配要求的优先级规则
  • SAFE_OFFSET 可以避免部分字符串没有逗号时出现的下标越界错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:45:01