我想使用SQL Bigquery来识别一个字符串在一行中有相同的数字超过4次。示例:
AAAAAB - true
BBBBAA - false
111111 - true
01010101010101 - false
到目前为止,我已经用regex尝试了不同的方法,但没有一种方法有好的结果。
regexp_contains(mycolumn,r'[0-9]\\1{4}') --- gives me false as an output
regexp_contains(mycolumn,r'(\d)*(\d){4}') --- returns true to every string as long it has more than 4 digits
REGEXP_CONTAINS(mycolumn, '')), r'(\d)1{4}') --same
regexp_contains(mycolumn,r'(\d){4}')`
我知道我可以使用CASE
或SUBSTRING
,但如果我能找到一个更好的解决方案,而不需要10行代码来解决一个“简单”的问题,那将是理想的。
感谢大家的参与。
3条答案
按热度按时间alen0pnh1#
\1
back-reference 用于引用一个捕获组-将[0-9]
放在圆括号( )
内。此外,对于 raw string literal,
r''
,您不需要转义值-额外的\
将生成一个包含文字\
字符的模式。最后,你提到 AAAAAB 应该是真的。
您可以将
A-Z
范围添加到 character class。jucafojl2#
考虑以下方法(BigQuery标准SQL)
如果应用于问题中的样本数据-输出为
rta7y2nd3#
在给出第一个答案后-上床睡觉时得到了更好的解决方案-见下文(仍然是BigQuery标准SQL)
如果应用于问题中的样本数据-输出为
P.S.我用下面的测试
附言2
如果你有长字符串-使用下面的优化版本