我有一个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))
但是我得到了
错误:'('是字符串开头无法识别的转义 “” /。("
答案 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'。因此,基本上,它会查找一个单词,该单词前后都有一个模式,然后提取该单词