我在bigquery中有一个表,其中有一个字符串字段,我需要读取、反汇编并生成一个新字段,其中有几行接收反汇编的字段
该字段的值如下:
A 栏 |
---|
|
|
|
我需要像这样转变;
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 函数将其分成几行,但我的困难在于如何在括号中处理这些值
使用以下方法
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
如果应用于您问题中的样本数据 - 输出为