我有一个文件名,R捕获的格式如下:
"0097_abcdef/0097_0/0097_0_04_bed.dbf"
我需要提取两个斜线之间的术语(即“0097_0”),但我尝试使用
gsub(".*/","",dbf.files[1])
,但它给了我 "0097_0_04_bed.dbf"
,这不是我想要的。有谁可以帮帮我吗?谢谢。
.*/(.*)/.*
使用第一组,例如\1。
> x = "0097_abcdef/0097_0/0097_0_04_bed.dbf"
> sub(".*/(.*)/.*","\\1",x)
[1] "0097_0"
另一种方法是使用文件路径操作函数。在我看来,这比正则表达式更清晰,并且还可以正确处理Windows路径:
# On a Linux path
x <- "0097_abcdef/0097_0/0097_0_04_bed.dbf"
basename( dirname(x) )
# [1] "0097_0"
# On a Windows path
y <- "c:\\0097_abcdef\\0097_0\\0097_0_04_bed.dbf"
basename( dirname(y) )
# [1] "0097_0"
它们是矢量化的,因此您可以为它们提供路径向量。
为了完整起见,还有file.path
可将这些部分拼合在一起。
你可以轻松使用strsplit
代替。例如,
R> x = "0097_abcdef/0097_0/0097_0_04_bed.dbf"
R> strsplit(x, "/")
[[1]]
[1] "0097_abcdef" "0097_0" "0097_0_04_bed.dbf"
R> strsplit(x, "/")[[1]][2]
[1] "0097_0"
tc <- textConnection(dbf.files)
y <- read.table(tc,sep="/",as.is=TRUE)[2]
close(tc)