RE2语法不匹配零

时间:2018-05-12 19:54:02

标签: google-bigquery re2

我在bigQuery的user_id列中有以下值(字符串):

g_123_h_34_p_2
g_13_h_14_p_0
g_0_h_14_p_10

我想在查询(where子句)中基于REGEXP_CONTAINS函数获取结果。 BigQuery使用re2库提供正则表达式支持。

我想在两个' _'之间没有0的情况下获取结果。我想要的结果是: g_123_h_34_p_2

我不确定我应该在REGEXP_CONTAINS函数中写什么正则表达式。我试着遵循正则表达式,但它并没有为我工作:

REGEXP_CONTAINS (user_dim.user_id, r"^g_[^0][0-9]{1,10}_h_[^0]_p_[^0]$") = TRUE
REGEXP_CONTAINS (user_dim.user_id, r"^g_[1-9]*_h_[^0]*_p_[^0]*$") = TRUE

正则表达式字符限制 不支持具有以下特殊字符的正则表达式,因为它们可能会导致延迟: *(星号) +(加号)

1 个答案:

答案 0 :(得分:2)

尝试下面的任何一个

REGEXP_CONTAINS(str, r'^0_|_0_|_0$')
REGEXP_CONTAINS(str, r'(^|_)0(_|$)')

例如

#standardSQL
WITH t AS (
  SELECT 'g_123_h_34_p_2' str UNION ALL
  SELECT 'g_13_h_14_p_0' UNION ALL
  SELECT 'g_0_h_14_p_10' 
)
SELECT * 
FROM t
WHERE NOT REGEXP_CONTAINS(str, r'(^|_)0(_|$)')

将返回

Row str  
1   g_123_h_34_p_2