首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在postgres中从regexp匹配后从列中提取信息

在postgres中从regexp匹配后从列中提取信息
EN

Stack Overflow用户
提问于 2020-02-03 10:35:12
回答 1查看 55关注 0票数 1

我在postgres表中有下面一栏。

代码语言:javascript
复制
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函数来提取以下信息。

想要的栏是:

代码语言:javascript
复制
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:

代码语言:javascript
复制
regexp_match(col, '^[^\:]+') )[1]::varchar AS col1,
regexp_match(col2, '(^[^:]*:\s*)(.*)\(.*') )[2]::varchar AS col2

比赛结束后,我将收到以下专栏:

代码语言:javascript
复制
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中得到它们。

这里的任何建议都会很有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-03 11:11:38

对于第二列,您可以像在第一种模式中一样,使用与除()以外的任何字符匹配的否定字符类(

您匹配得太多的原因是.*过度匹配,并且会追溯到字符串中(的最后一次出现。

您可以使用非贪婪版本的.*?,但否定字符类的效率要高一些。

代码语言:javascript
复制
(^[^:]*:\s*)([^()]+)\(.*

Regex演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60037448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档