У меня есть следующий столбец (столбец) в таблице postgres.
col
uniprotkb:Q92843(protein(MI:0326), 9606 - Homo sapiens)
intact:EBI-4392836(peptide(MI:0327), -1 - In vitro)
chebi:CHEBI:132213(small molecule(MI:0328), -2 - Chemical synthesis (Chemical synthesis))
dip:DIP-24261N(protein(MI:0326), 9606 - Homo sapiens)
reactome:R-HSA-2089970(stable complex(MI:1302), 9606 - Homo sapiens)
refseq:NR_131157(lncrna(MI:2190), 9606 - Homo sapiens)
rnacentral:URS00004A7003_9606(rna(MI:0320), 9606 - Homo sapiens)
signor:SIGNOR-C173(stable complex(MI:1302), 9606 - Homo sapiens)
uniparc:UPI0000073D6C(protein(MI:0326), 9606 - Homo sapiens)
Я применяю функцию regexp_match к этому столбцу для извлечения следующей информации.
Желаемые столбцы:
col1 col2 col3 col4 col5
uniprotkb Q92843 protein MI:0326 Homo sapiens
intact EBI-4392836 peptide MI:0327 In vitro
chebi CHEBI:132213 small molecule MI:0328 Chemical synthesis (Chemical synthesis
dip DIP-24261N protein MI:0326 Homo sapiens
reactome R-HSA-2089970 stable complex MI:1302 Homo sapiens
refseq NR_131157 lncrna MI:2190 Homo sapiens
rnacentral URS00004A7003_9606 rna MI:0320 Homo sapiens
signor SIGNOR-C173 stable complex MI:1302 Homo sapiens
uniparc UPI0000073D6C protein MI:0326 Homo sapiens
Я применил к этому столбцу следующее регулярное выражение:
regexp_match(col, '^[^\:]+') )[1]::varchar AS col1,
regexp_match(col2, '(^[^:]*:\s*)(.*)\(.*') )[2]::varchar AS col2
После совпадения я получаю следующие столбцы:
col1 col2
uniprotkb Q92843(protein
intact EBI-4392836(peptide
chebi CHEBI:132213(
dip:DIP-24261N(
reactome:R-HSA-2089970(
refseq:NR_131157(
rnacentral:URS00004A7003_9606(
signor:SIGNOR-C173(
uniparc:UPI0000073D6C(
Я избегаю скобок, но все еще получаю их в столбце 2.
Любые предложения здесь будут очень полезны