40

我有一个像这样的文件名:name1.csv我想提取这个字符串的两个子字符串。一个将 存储name1在一个变量中,另一个将扩展名 , 存储csv在另一个变量中,而没有点。

我一直在寻找是否有像indexOfJava 这样的函数允许进行这种操作,但我根本没有找到任何东西。

有什么帮助吗?

4

3 回答 3

72

使用strsplit

R> strsplit("name1.csv", "\\.")[[1]]
[1] "name1" "csv"  
R> 

请注意,您 a) 需要转义点(因为它是正则表达式的元字符)和 b) 处理strsplit()返回一个列表的事实,该列表通常只有第一个元素是感兴趣的。

更通用的解决方案涉及可以提取匹配项的正则表达式。

对于文件名的特殊情况,您还有:

R> library(tools)   # unless already loaded, comes with base R
R> file_ext("name1.csv")
[1] "csv"
R> 

R> file_path_sans_ext("name1.csv")
[1] "name1"
R> 

因为这些是常见的任务(参见basenameshell 等)。

于 2013-01-05T16:27:14.477 回答
7

使用strsplit()

http://stat.ethz.ch/R-manual/R-devel/library/base/html/strsplit.html

例子:

> strsplit('name1.csv', '[.]')[[1]]
[1] "name1" "csv"  

请注意,第二个参数是正则表达式,这就是为什么您不能只传递单个点(它将被解释为“任何字符”)。

于 2013-01-05T16:28:42.633 回答
2

使用正则表达式,您可以执行此操作,例如

regmatches(x='name1.csv',gregexpr('[.]','name1.csv'),invert=TRUE)
[[1]]
[1] "name1" "csv"  
于 2013-01-05T21:43:53.157 回答