路径变量的子串

adi*_*der 4 regex r

我有一个这样的路径../some/thing/foobar/foobar.happening,我希望character在最后/和之间的字符串..

我意识到这对某些人来说很容易,但我还不熟悉正则表达式等等.我也可能自己也可以这样做strsplit,但我正在寻找一个优雅的单行,如果可能的话.

提前致谢!

GSe*_*See 7

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)