我有这样的路径../some/thing/foobar/foobar.happening
,我想要character
最后一个/
和.
.
我意识到这对某些人来说很容易,但我还不熟悉正则表达式等。我也可能自己用strsplit
.
提前致谢!
basename
会给你最后一个斜线后的部分。然后,你可以在点上分割(你必须用两个来逃避\
)
> (name <- basename("../some/thing/foobar/foobar.happening"))
[1] "foobar.happening"
> unlist(strsplit(name, "\\."))
[1] "foobar" "happening"
然后选择第一个元素
> unlist(strsplit(name, "\\."))[1]
[1] "foobar"
我看到您实际上要求的是除strsplit
. 这是一个正则表达式
> sub(".*/([^/]+)\\..*", "\\1", "../some/thing/foobar/foobar.happening")
[1] "foobar"
.*
/
[^/]
(在括号内,^
表示“不是”),一次或多次+
。 \\.
.*
。 然后它只用括号内的东西替换它,[^/]+
即正斜杠和点之间的所有内容。\\1
表示第一组括号内的内容。(在这种情况下只有一组,但如果有第二组,我们可以用 引用它\\2
)
您可以使用basename()
和的组合file_path_sans_ext()
。(后者来自于基本 R 发行版附带的工具包。)
path <- "../some/thing/foobar/foobar.happening"
library(tools)
file_path_sans_ext(basename(path))
# [1] "foobar"
## Or, if you don't want to load the tools package
tools::file_path_sans_ext(basename(path))
# [1] "foobar"