我有这样的路径../some/thing/foobar/foobar.happening
,我想要character
字符串在最后的/
和.
之间。路径变量的子字符串
我意识到这对于一些人来说很容易,但我还不熟悉正则表达式等。 我也可能可以自己做到这一点strsplit
,但我正在寻找一个优雅的单线程,如果可能。
在此先感谢!
我有这样的路径../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()
的组合。 (后者来自工具包,它附带的基本科研分布。)
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"
doh!几个星期前我刚刚推荐了这个功能,但今天我想不起来。 – GSee
用于'file_path_sans_ext'的+1。我知道这必须在某个地方。尽管如此,这真是一个可怕的名字。 –
这是值得快速看看函数def,看到它的一些额外的东西,它提交文件的名字...... –
相关:http://stackoverflow.com/questions/14173754/splitting-a-file-name – GSee