如何提取R中一个字符之后和另一个字符最后一次出现之前发生的所有内容



我有三个字符串,如下所示:

"GO:0016559~peroxisome fission,"
"GO:0006122~mitochondrial electron transport, ubiquinol to cytochrome c,"
"GO:0006122~mitochondrial electron transport, ubiquinol to cytochrome c,GO:0006334~nucleosome assembly,"

我如何提取在"~"并且在"(哪一个是字符串的末尾,或者后面是GO:……,(?

期望输出:

"peroxisome fission"
"mitochondrial electron transport, ubiquinol to cytochrome c"
"mitochondrial electron transport, ubiquinol to cytochrome c" "nucleosome assembly"

这将在R.中的一个概括声明中实现

我试过使用这个:

strapplyc(str, "[~](.*?)[,]", simplify = c)

(其中str是一个变量,在循环中存储三个字符串中的每一个,每次一个(

但我得到的结果是:

"peroxisome fission"
"mitochondrial electron transport"
"mitochondrial electron transport" "nucleosome assembly"

在基本R中,您可以执行:

sub(".*~",'', grep("~",t(read.csv(text = s, header = FALSE)), value = TRUE))
[1] "peroxisome fission"               "mitochondrial electron transport"
[3] "mitochondrial electron transport" "nucleosome assembly"      

您可以使用

(?<=~).*?(?=,(?:GO:d+~|$))

请参阅regex演示详细信息

  • (?<=~)-位于~字符后面的位置
  • .*?-除换行字符之外的任何零个或多个字符,尽可能少
  • (?=,(?:GO:d+~|$))-正向前瞻,需要逗号,然后是GO:、一个或多个数字和~或当前位置右侧的字符串结尾

查看R演示:

> library(stringr)
> x <- c("GO:0016559~peroxisome fission,","GO:0006122~mitochondrial electron transport, ubiquinol to cytochrome c,","GO:0006122~mitochondrial electron transport, ubiquinol to cytochrome c,GO:0006334~nucleosome assembly,")
> unlist(str_extract_all(x, "(?<=~).*?(?=,(?:GO:\d+~|$))"))
[1] "peroxisome fission"                                         
[2] "mitochondrial electron transport, ubiquinol to cytochrome c"
[3] "mitochondrial electron transport, ubiquinol to cytochrome c"
[4] "nucleosome assembly"    

最新更新