我有一个档案
ABCD.csv
之前的长度.csv
不是固定的,可以任意变化。
如何提取.csv
。
Answers:
basename
还将删除通向文件的路径。并使用此正则表达式删除所有扩展名。
filepath <- "d:/Some Dir/ABCD.csv"
sub(pattern = "(.*)\\..*$", replacement = "\\1", basename(filepath))
# [1] "ABCD"
或者,file_path_sans_ext
如Tyler Rinker建议的那样使用:
file_path_sans_ext(basename(filepath))
# [1] "ABCD"
sub(pattern = "(.*?)\\..*$", replacement = "\\1", basename(filepath))
您可以使用sub
或substr
sub('\\.csv$', '', str1)
#[1] "ABCD"
要么
substr(str1, 1, nchar(str1)-4)
#[1] "ABCD"
使用@JasonV帖子中的'file_path'
sub('\\..*$', '', basename(filepath))
#[1] "ABCD"
要么
library(stringr)
str_extract(filepath, perl('(?<=[/])([^/]+)(?=\\.[^.]+)'))
#[1] "ABCD"
str1 <- 'ABCD.csv'
.
的“\\.
可能”之后.
foo..
foo.
不确定如何处理这些
.<word>
在最后使用OP指导并且没有其他情况,那么这将起作用
您也可以尝试以下操作:
data <- "ABCD.csv"
gsub(pattern = "\\.csv$", "", data)
#[1] "ABCD"
例如,这在文件列表的情况下也会很有帮助
data <- list.files(pattern="\\.csv$")
,使用该代码将删除列表中所有文件的扩展名。
这是适用于压缩和多个文件的实现:
remove.file_ext <- function(path, basename = FALSE) {
out <- c()
for (p in path) {
fext <- file_ext(path)
compressions <- c("gzip", "gz", "bgz", "zip")
areCompressed <- fext %in% compressions
if (areCompressed) {
ext <- file_ext(file_path_sans_ext(path, compression = FALSE))
regex <- paste0("*\\.",ext,"\\.", fext,"$")
} else {
regex <- paste0("*\\.",fext,"$")
}
new <- gsub(pattern = regex, "", path)
out <- c(out, new)
}
return(ifelse(basename, basename(out), out))
}
加载所需的库:
> library(stringr)
从正则表达式中提取所有匹配项:
> str_match("ABCD.csv", "(.*)\\..*$")
[,1] [,2]
[1,] "ABCD.csv" "ABCD"
仅返回结果的第二部分,该第二部分对应于与文件名匹配的组:
> str_match("ABCD.csv", "(.*)\\..*$")[,2]
[1] "ABCD"
编辑@ U-10-Forward:
它与其他答案基本相同。只是我发现此解决方案更可靠。
正则表达式明智地意味着:
()=组
。* =任意次数除换行符外的任何单个字符
//是转义符号,因此//。字面意思是“。”
。* =任意次数的任意字符
$意味着应该在输入字符串的末尾
逻辑是,它将返回“。”之前的组。在字符串的末尾跟一组字符(在这种情况下,它等于文件扩展名)。
?tools::file_ext