我需要处理字符串字段中的值并将其分解为数组

问题描述 投票:0回答:1

我在bigquery中有一个表,其中有一个字符串字段,我需要读取、反汇编并生成一个新字段,其中有几行接收反汇编的字段

该字段的值如下:

A 栏
CC(2.0)+,EXO(BLT7,CFC6,E6D)
CC(2.0)+,EXO(BPT7,CFC5)+
MY(22,23,24)+

我需要像这样转变;

B 栏
CC(2.0)+
EXO(BLT7)
EXO(CFC6)
EXO(E6D)
CC(2.0)+
EXO(BPT7)
EXO(CFC5)+
我的(22)
我的(23)
我的(24)+
# transform this: CC(2.0)+,EXO(BLT7,CFC6,E6D)  
# into this: CC(2.0)+,EXO(BLT7),EXO(CFC6),EXO(E6D)  
# select Split('CC(2.0)+,EXO(BLT7),EXO(CFC6),EXO(E6D)',',') 

有人知道我该怎么做吗? 有正则表达式吗?

要分成多行很容易,只需使用 split 功能即可。
但是如何将“EXO(BLT7,CFC6,E6D)”这样的括号内的值重写为“EXO(BLT7),EXO(CFC6),EXO(E6D)”呢?

我尝试使用替换功能,但它开始变成一个小怪物,我无法处理所有情况。

正如我之前所说,我什至可以使用 split 函数将其分成几行,但我的困难在于如何在括号中处理这些值

string google-bigquery regexp-replace sql-function
1个回答
0
投票

使用以下方法

with temp as (
  select ColumnA, el,
    regexp_extract(el, r'(.*?)\(') el1, 
    split(regexp_extract(el, r'\((.*?)\)')) arr, 
    regexp_extract(el, r'\+$') el3  
  from your_table, unnest(regexp_extract_all(ColumnA, r'(.*?\(.*?\)\+?),?')) el 
  order by ColumnA 
)
select format('%s(%s)%s', el1, el2, if(array_length(arr) - 1 = pos, ifnull(el3, ''), '')) as ColumnB
from temp, unnest(arr) el2 with offset as pos    

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

© www.soinside.com 2019 - 2024. All rights reserved.