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}$")
为什么之前的正则没生效?
我们来逐个分析问题:
第一个正则
^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,所以直接匹配失败。
第二个正则
^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
相关产品推荐
相关产品推荐

