提取两个字符之间的字符R

时间:2019-09-29 22:54:23

标签: r

我有一个df,我想提取'./'和'.v8'之间的组织名称 因此,对于此df,结果将是一个仅包含“甲状腺”,“ Esophagus_Muscularis”,Adipose_Subderma

的列
gene<-c("ENSG00000065485.19","ENSG00000079112.9","ENSG00000079112")
tissue<-c("./Thyroid.v8.signif_variant_gene_pairs.txt.gz","./Esophagus_Muscularis.v8.signif_variant_gene_pairs.txt.gz","./Adipose_Subcutaneous.v8.signif_variant_gene_pairs.txt.gz")
df<-data.frame(gene,tissue)

我真的很努力与正则表达式并尝试过:

pattern="/.\(.*)/.v8(.*)"
result <- regmatches(df$tissue,regexec(pattern,df$tissue))

但是我得到了

  

错误:'('是字符串开头无法识别的转义   “” /。("

1 个答案:

答案 0 :(得分:1)

R中,我们需要转义(\)。在这里,我们使用了一个正则表达式环顾四周,它匹配\\w+(元字符-转义字符)和.之后的\({{ 1}}转义)和“ v8”

.

\\-是正向查找,以匹配library(stringr) library(dplyr) df %>% mutate(new = str_extract(tissue, "(?<=\\.[/])\\w+(?=\\.v8)")) # gene tissue new #1 ENSG00000065485.19 ./Thyroid.v8.signif_variant_gene_pairs.txt.gz Thyroid #2 ENSG00000079112.9 ./Esophagus_Muscularis.v8.signif_variant_gene_pairs.txt.gz Esophagus_Muscularis #3 ENSG00000079112 ./Adipose_Subcutaneous.v8.signif_variant_gene_pairs.txt.gz Adipose_Subcutaneous 之前的(?<=\\.[/])./-正向查找匹配单词后的\\w+和字符串'v8'。因此,基本上,它会查找一个单词,该单词前后都有一个模式,然后提取该单词