我在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我在本专栏中应用了以下regex:
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(我正在转义括号,但仍然在col2中得到它们。
这里的任何建议都会很有帮助。
发布于 2020-02-03 11:11:38
对于第二列,您可以像在第一种模式中一样,使用与除(或)以外的任何字符匹配的否定字符类(。
您匹配得太多的原因是.*过度匹配,并且会追溯到字符串中(的最后一次出现。
您可以使用非贪婪版本的.*?,但否定字符类的效率要高一些。
(^[^:]*:\s*)([^()]+)\(.*https://stackoverflow.com/questions/60037448
复制相似问题