BigQuery 的 Regex Positive Lookbehind 替代方案

Regex Positive Lookbehind alternative for BigQuery

我有一个正则表达式,它从列中的参数中提取值,其中很少有用“|”分隔的额外参数。字段中的参数顺序不正确。

我的正则表达式: ^(?:_AB=)[^\|]*

例如:

extraparams regexp_results
_A=0|_AB=0|_ABC=132|_AC=0|_ACD=TEST|_ADU=9|TEST_P=1 0
_A=0|AG=INFO|_ABC=132|_ACD=EXP|_AD=9 NULL

此解决方案一直有效,直到我不得不在 BigQuery 中使用它。您是否有想法在不使用 Positive Lookbehind 的情况下重写此模式?

这行得通吗?

SELECT extraparams, REGEXP_REPLACE(REGEXP_EXTRACT(extraparams, r'_AB=(.+?\|){1}'), '\|','') AS regexp_results FROM ( SELECT '_A=0|_AB=0|_ABC=132|_AC=0|_ACD=TEST|_ADU=9|TEST_P=1' AS extraparams UNION ALL SELECT '_A=0|AG=INFO|_ABC=132|_ACD=EXP|_AD=9' AS extraparams )

同时考虑以下方法

select extraparams, 
  ( select split(kv, '=')[safe_offset(1)]
    from unnest(split(extraparams, '|')) kv
    where split(kv, '=')[offset(0)] = '_AB'
  ) as regexp_results
from your_table            

如果应用于您问题中的示例数据 - 输出为