Regex 替换括号并根据Postgres中的分隔符将列拆分为多行
我有一个表,列之间用“;”分隔。数据如下所示:Regex 替换括号并根据Postgres中的分隔符将列拆分为多行,regex,postgresql,Regex,Postgresql,我有一个表,列之间用“;”分隔。数据如下所示: row_id col 1 p.[D389R;D393_W394delinsRD] 2 p.[D390R;D393_W394delinsRD] 3 p.D389R 4. p.[D370R;D393_W394delinsRD] 我想替换“[]”括号,无论它们在哪里,并获取文本。稍后,我想将字符串拆分为“;”并将“p.”连接到拆分的文本(如果不存在)并创建新行 预期产出为: row_i
row_id col
1 p.[D389R;D393_W394delinsRD]
2 p.[D390R;D393_W394delinsRD]
3 p.D389R
4. p.[D370R;D393_W394delinsRD]
我想替换“[]”括号,无论它们在哪里,并获取文本。稍后,我想将字符串拆分为“;”并将“p.”连接到拆分的文本(如果不存在)并创建新行
预期产出为:
row_id new_col
1 p.D389R
2 p.D393_W394delinsRD
3 p.D390R
4 p.D393_W394delinsRD
5 p.D389R
6 p.D370R
7 p.D393_W394delinsRD
我尝试了下面的查询以获得所需的输出
SELECT *,
CASE
WHEN regexp_split_to_table(regexp_replace(col, '\[|\]', '', 'g'), E';') NOT LIKE 'p.[%'
THEN 'p.' || (regexp_split_to_table(regexp_replace(col, '\[|\]', '', 'g'), E';'))[1]
ELSE regexp_split_to_table(regexp_replace(col, '\[|\]', '', 'g'), E';')[2]
END AS new_col
FROM table;
任何建议都会非常有用。我会首先从字符串中删除常量值(
p.
和]
),然后取消对它的测试
with clean as (
select row_id, regexp_replace(col, '^p\.(\[){0,1}|\]$', '', 'g') as col
from the_table
)
select row_id, 'p.'|| t.c
from clean c
cross join unnest(string_to_array(c.col, ';')) as t(c)
CTE(带…
)实际上不是必需的,但是这样最不重要的(…)
就可以保持可读性