Regex 路径变量的子字符串
我有这样一个路径Regex 路径变量的子字符串,regex,r,Regex,R,我有这样一个路径。/some/thing/foobar/foobar.oching,我想要最后一个/和之间的字符字符串 我意识到这对一些人来说很容易,但我还不熟悉正则表达式等。 我可能也可以自己用strsplit做这个,但是如果可能的话,我正在寻找一个优雅的单行程序 提前谢谢 basename将给出最后一个斜杠后面的部分。然后,您可以在点上拆分(必须用两个\来转义) 我知道你实际上要求的不是strsplit。这是一个正则表达式 > sub(".*/([^/]+)\\..*", "\\1"
。/some/thing/foobar/foobar.oching
,我想要最后一个/
和
之间的字符
字符串
我意识到这对一些人来说很容易,但我还不熟悉正则表达式等。
我可能也可以自己用strsplit做这个,但是如果可能的话,我正在寻找一个优雅的单行程序
提前谢谢
basename
将给出最后一个斜杠后面的部分。然后,您可以在点上拆分(必须用两个\
来转义)
我知道你实际上要求的不是strsplit。这是一个正则表达式
> sub(".*/([^/]+)\\..*", "\\1", "../some/thing/foobar/foobar.happening")
[1] "foobar"
- 它查找任何
*
- 后跟正斜杠
/
- 后跟任何非正斜杠的内容(在括号内,
表示“非”),一次或多次^
李>+
- 后跟一个点
\\.
- 后跟任何零次或多次
李>*
然后它用括号内的东西来代替它,括号内的东西在正斜杠和点之间。
\\1
表示第一组括号内的内容。(在本例中只有一个集合,但如果有第二个集合,我们可以使用\\2
来引用它)您可以使用basename()
和文件路径\u sans\u ext()
的组合。(后者来自工具包,该包附带基本的R发行版。)
path-doh!几周前我刚刚推荐了这个函数,但今天我想不起来了。file\u path\u sans\u ext的+1。我知道这一定在某个地方。这是一个多么糟糕的名字啊。值得快速查看一下函数def,看看它对传递的文件名所做的额外操作……这两个函数是相互转换的!相关:哦,好答案!我不知道basename函数
> unlist(strsplit(name, "\\."))[1]
[1] "foobar"
> sub(".*/([^/]+)\\..*", "\\1", "../some/thing/foobar/foobar.happening")
[1] "foobar"
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"