提取两个字符R之间的字符[重复]
Posted
技术标签:
【中文标题】提取两个字符R之间的字符[重复]【英文标题】:Extract characters between two characters R [duplicate] 【发布时间】:2020-01-29 06:32:57 【问题描述】:我有一个 df,我想提取 './' 和 '.v8' 之间的组织名称 所以对于这个df,结果将是一个只有“甲状腺”、“食道肌肉”、“脂肪”的列
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))
但我明白了:
错误:'(' 是字符串开头的无法识别的转义 ""/.("
【问题讨论】:
qdapRegex::ex_between(df$tissue, "/", ".v8")
我如何使它成为一列字符串而不是列表??
unlist
他们,unlist(qdapRegex::ex_between(df$tissue, "/", ".v8"))
【参考方案1】:
在R
,我们需要转义(\
)。在这里,我们使用了匹配单词 (\\w+
) 的正则表达式查找,该单词在 .
(元字符 - 转义)和 \
之后,然后是 .
(\\
转义)和 '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)
- 正向向后查找以匹配 .
和字符串 'v8 '在这个词之后。因此,基本上,它会查找前后有模式的单词并提取该单词
【讨论】:
哇!那行得通-谢谢。你能解释一下正则表达式吗?我理解'\\。'正在转义特殊字符“。”我认为 \\w+ 是任何单词或字符,但不知道其余的? @zoe 谢谢。我更新了一些描述 嗨@akrun,抱歉,但我有一些行在字符串中有一个'-',例如'./Cells_EBV-transformed_lymphocytes.v8.signif_varianiant_gene_pairs.txt.gz',我认为这会导致'不”。有没有办法也抓住'-'?? @zoe 那会不会使欺骗链接不是欺骗?以上是关于提取两个字符R之间的字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章