Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 路径变量的子字符串_Regex_R - Fatal编程技术网

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"