如何用BigQuery SQL识别字符串中连续5次及以上的相同数字
BigQuery SQL识别连续5次及以上相同数字的解决方案
要实现这个需求,正确的正则表达式需利用捕获组+反向引用,匹配一个数字后连续重复4次及以上(加上捕获的那1次,总共5次或更多)。
正确的SQL表达式
REGEXP_CONTAINS(mycolumn, r'(\d)\1{4,}')
你之前的表达式无效原因
regexp_contains(mycolumn,r'[0-9]\\1{4}'):[0-9]未定义捕获组,\1无法引用任何匹配内容,表达式完全不生效。regexp_contains(mycolumn,r'(\d)*(\d){4}'):仅匹配“任意数量数字+4个数字”,不要求数字相同,只要字符串含4个以上数字就返回true,不符合需求。REGEXP_CONTAINS(mycolumn, '')), r'(\d)1{4}'):匹配一个数字后跟固定的4个1,不是匹配与前面相同的数字,逻辑错误。regexp_contains(mycolumn,r'(\d){4}'):仅匹配连续4个数字,既不要求数字相同,也不满足“5次及以上”的条件。
测试示例验证
用你提供的测试数据验证(注:你标记的AAAAAB为true应为笔误,该字符串不含数字,按需求应返回false):
| 字符串 | 结果 |
|---|---|
| AAAAAB | false |
| BBBBAA | false |
| 111111 | true |
| 01010101010101 | false |
完整查询示例
WITH test_data AS ( SELECT 'AAAAAB' AS mycolumn UNION ALL SELECT 'BBBBAA' UNION ALL SELECT '111111' UNION ALL SELECT '01010101010101' ) SELECT mycolumn, REGEXP_CONTAINS(mycolumn, r'(\d)\1{4,}') AS has_consecutive_five_digits FROM test_data;
内容的提问来源于stack exchange,提问作者Newton
相关产品推荐
相关产品推荐

