4

我有这样的路径../some/thing/foobar/foobar.happening,我想要character最后一个/..

我意识到这对某些人来说很容易,但我还不熟悉正则表达式等。我也可能自己用strsplit.

提前致谢!

4

2 回答 2

7

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

于 2013-01-24T22:02:39.257 回答
4

您可以使用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"
于 2013-01-24T22:44:01.017 回答