Ich habe eine Datei
ABCD.csv
Die Länge vor dem .csv
ist nicht festgelegt und variiert zu jeder Länge.
Wie kann ich die Portion vor dem extrahieren .csv
.
Es gibt einen eingebauten in file_path_sans_ext
der Standard - Installation von Tools - Paket , das die Datei ohne die Erweiterung packt.
tools::file_path_sans_ext("ABCD.csv")
## [1] "ABCD"
?tools::file_ext
basename
entfernt auch den Pfad, der zur Datei führt. Und mit dieser Regex wird jede Erweiterung entfernt.filepath <- "d:/Some Dir/ABCD.csv" sub(pattern = "(.*)\\..*$", replacement = "\\1", basename(filepath)) # [1] "ABCD"
Oder
file_path_sans_ext
wie Tyler Rinker vorgeschlagen hat:file_path_sans_ext(basename(filepath)) # [1] "ABCD"
quelle
sub(pattern = "(.*?)\\..*$", replacement = "\\1", basename(filepath))
Sie können
sub
oder verwendensubstr
sub('\\.csv$', '', str1) #[1] "ABCD"
oder
substr(str1, 1, nchar(str1)-4) #[1] "ABCD"
Verwenden des 'Dateipfads' aus dem Beitrag von @ JasonV
sub('\\..*$', '', basename(filepath)) #[1] "ABCD"
Oder
library(stringr) str_extract(filepath, perl('(?<=[/])([^/]+)(?=\\.[^.]+)')) #[1] "ABCD"
Daten
str1 <- 'ABCD.csv'
quelle
.
nach dem\\.
Könnte das auch.
buchstäblich sein dhfoo..
foo.
Nicht sicher, was mit diesen zu tun ist.<word>
am Ende haben wird und es keine anderen Fälle gibt, würde funktionierenSie können dies auch versuchen:
data <- "ABCD.csv" gsub(pattern = "\\.csv$", "", data) #[1] "ABCD"
Dies ist beispielsweise auch bei einer Liste von Dateien hilfreich
data <- list.files(pattern="\\.csv$")
Wenn Sie den Code verwenden, wird die Erweiterung aller Dateien in der Liste entfernt.quelle
Wenn Sie Dateinamen mit mehreren (möglichen Erweiterungen) haben und nur die letzte Erweiterung entfernen möchten, können Sie Folgendes versuchen.
Betrachten Sie den Dateinamen
foo.bar.baz.txt
diessub('\\..[^\\.]*$', '', "foo.bar.baz.txt")
werde dich verlassen mit
foo.bar.baz
.quelle
Hier ist eine Implementierung, die für die Komprimierung und mehrere Dateien funktioniert:
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)) }
quelle
Laden der benötigten Bibliothek:
Extrahieren aller Übereinstimmungen aus dem regulären Ausdruck:
> str_match("ABCD.csv", "(.*)\\..*$") [,1] [,2] [1,] "ABCD.csv" "ABCD"
Rückgabe nur des zweiten Teils des Ergebnisses, der der Gruppe entspricht, die dem Dateinamen entspricht:
> str_match("ABCD.csv", "(.*)\\..*$")[,2] [1] "ABCD"
BEARBEITEN für @ U-10-Forward:
Es ist im Grunde das gleiche Prinzip wie die andere Antwort. Nur dass ich diese Lösung robuster fand.
Regex weise bedeutet es:
() = Gruppe
. * = ein beliebiges einzelnes Zeichen außer dem Zeilenumbruchzeichen beliebig oft
// ist Escape-Notation, also //. bedeutet wörtlich "."
. * = beliebige Zeichen beliebig oft
$ means sollte am Ende der Eingabezeichenfolge stehen
Die Logik ist dann, dass es die Gruppe vor einem "." Zurückgibt. gefolgt von einer Gruppe von Zeichen am Ende der Zeichenfolge (die in diesem Fall der Dateierweiterung entspricht).
quelle