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

BigQuery中用RE2正则筛选下划线间无0的user_id数据

解决BigQuery中用REGEXP_CONTAINS筛选无0分段的user_id问题

我帮你调整了正则表达式,完美匹配你要的结果,同时避开了*和+来防止查询延迟:

正确的查询语句

SELECT *
FROM your_table_name -- 替换成你的实际表名
WHERE REGEXP_CONTAINS(user_dim.user_id, r"^g_[1-9]{1,10}_h_[1-9]{1,10}_p_[1-9]{1,10}$")

为什么之前的正则没生效?

我们来逐个分析问题:

  1. 第一个正则 ^g_[^0][0-9]{1,10}_h_[^0]_p_[^0]$

    • [^0][0-9]{1,10} 这里的[^0]是单个非0字符,后面跟1-10位任意数字,意味着g_后面的分段可能包含0(比如g_10_h_34_p_2会被匹配,但这不符合你的需求);
    • _h_[^0]_ 只匹配h_后面单个非0字符,而你的目标记录g_123_h_34_p_2中h_后面是两位数字34,所以直接匹配失败。
  2. 第二个正则 ^g_[1-9]*_h_[^0]*_p_[^0]*$

    • 你提到*会导致查询延迟,而且*允许空分段(比如g__h_34_p_2这种无效格式也会被匹配),不符合你的数据格式要求。

正则规则解释

这个正则的每个部分都严格贴合你的需求:

  • ^g_:匹配开头固定的g_前缀
  • [1-9]{1,10}:匹配1到10位全为非0的数字(你可以根据实际数据长度调整{1,10}的范围),确保g_和_h之间的分段没有0
  • _h_:匹配中间的分隔符
  • [1-9]{1,10}:同理,确保_h和_p之间的分段没有0
  • _p_:匹配分隔符
  • [1-9]{1,10}$:匹配结尾的非0数字分段,确保没有0且符合长度要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:18:39