basename在最后一次斜线之后会给你一个部分.然后,你可以分裂点(你必须用两个逃脱\)
> (name <- basename("../some/thing/foobar/foobar.happening"))
[1] "foobar.happening"
> unlist(strsplit(name, "\\."))
[1] "foobar" "happening"
Run Code Online (Sandbox Code Playgroud)
然后选择第一个元素
> unlist(strsplit(name, "\\."))[1]
[1] "foobar"
Run Code Online (Sandbox Code Playgroud)
我看到你实际上要求的方式不是strsplit.这是一个正则表达式
> sub(".*/([^/]+)\\..*", "\\1", "../some/thing/foobar/foobar.happening")
[1] "foobar"
Run Code Online (Sandbox Code Playgroud)
.* / [^/](在括号内,^意思是"不是"),一次或多次+. \\. .*. 然后它只用括号内的东西替换它,[^/]+它是正斜杠和点之间的所有东西.这\\1意味着第一组括号内的东西.(在这种情况下只有一套,但如果有一秒我们可以参考它\\2)