如何在BigQuery中按指定规则筛选有效邮箱地址?
BigQuery提取符合规则的有效邮箱地址解决方案
需求回顾
需要从BigQuery表中筛选出满足以下条件的邮箱:
- 无论邮箱前缀是否包含多个点,只要最后一个点之后恰好有3个字符的邮箱才保留;
- 最后一个点后字符数为1或2的邮箱排除。
原查询的问题
你之前使用的REGEXP_CONTAINS(email, r'[A-Za-z0-9]{3}.')存在两个核心问题:
- 正则未定位到邮箱末尾,会匹配字符串中任意位置的「3个字母数字+点」组合,完全不关联最后一个点后的字符数;
- 点符号未转义,正则中
.是匹配任意字符的通配符,而非实际的点。
正确解决方案
核心正则逻辑
使用锚定到字符串末尾的正则,确保最后一个点后恰好是3个字母/数字:
r'\.[a-zA-Z0-9]{3}$'
各部分含义:
\.:匹配实际的点符号(转义后不再是通配符);[a-zA-Z0-9]{3}:严格匹配3个字母或数字;$:锚定到字符串末尾,保证这3个字符是邮箱的最后部分。
BigQuery查询语句
将正则应用到查询中,筛选符合条件的邮箱:
SELECT email FROM `your-project.your-dataset.your-table` WHERE REGEXP_CONTAINS(email, r'\.[a-zA-Z0-9]{3}$');
测试验证
- 符合条件的邮箱示例:
abc@gmail.com、abc.xyz@gmail.com、user_123@test-domain.org - 不符合条件的邮箱示例:
abc@gmail.co、test@example.c、admin@site.co.uk
内容的提问来源于stack exchange,提问作者sai
相关产品推荐
相关产品推荐

