R语言如何提取向量中两个指定字符串之间的基因名
R提取目标基因名的实现方法
现有测试向量如下:
dat1 <- c('human(display_long)|uniprotkb:ESR1(gene name)') dat2 <- c('human(display_long)|uniprotkb:TP53(gene name)') dat3 <- c('human(display_long)|uniprotkb:GPX4(gene name)') dat4 <- c('human(display_long)|uniprotkb:ALOX15(gene name)') dat5 <- c('human(display_long)|uniprotkb:PGR(gene name)') dat <- c(dat1,dat2,dat3,dat4,dat5)
方法1:基础R原生实现(无需额外依赖)
使用sub()函数结合正则捕获组实现提取:
gene_names <- sub("human\\(display_long\\)\\|uniprotkb:(.*?)\\(gene name\\)", "\\1", dat)
正则说明:
\\(、\\)、\\|是对原始字符串中特殊符号的转义,(.*?)为非贪婪捕获组,匹配两个固定分隔串中间的基因名,\\1表示取第一个捕获组的内容作为替换结果。
运行后gene_names即为提取到的基因名向量,输出结果为:
[1] "ESR1" "TP53" "GPX4" "ALOX15" "PGR"
方法2:stringr包实现(tidyverse生态)
如果使用tidyverse工具链,可通过正向后视/前瞻断言更直观实现匹配:
library(stringr) gene_names <- str_extract(dat, "(?<=human\\(display_long\\)\\|uniprotkb:).*?(?=\\(gene name\\))")
得到的结果和基础R方法完全一致。
内容的提问来源于stack exchange,提问作者pengxianglan
相关产品推荐
相关产品推荐

