I have the following string:
x <- "DevicePool1/Device1/Measurements/20210910231005/event.csv"
how can I retrieve Device1
out of this string in R
?
CodePudding user response:
Try any of these. The first 4 also work if x is a character vector such that each element stores a path, e.g. x <- c(x, x)
. No packages are used.
read.table(text = x, sep = "/", fill = TRUE)[[2]]
sub(".*?/(.*?)/.*", "\\1", x)
gsub("^.*?/|/.*", "", x, perl = TRUE)
sapply(strsplit(x, "/"), `[`, 2)
scan(text = x, sep = "/", what = "", quiet = TRUE)[2]
CodePudding user response:
Should work in your case from stringr package
x <- "DevicePool1/Device1/Measurements/20210910231005/event.csv"
unlist(str_split(x, "/"))[2]
CodePudding user response:
You can use a regular expression
> gsub(".*/(.*?)/.*","\\1",x)
[1] "Device1"
.*
means any character appearing 0 or more times and
/(.*?)/
is your pattern
CodePudding user response:
Another one using regexpr
and regmatches
with look behind for /
using (?<=/)
and look ahead for /
using (?=/)
and get the non greedy match in between with .*?
or everything but not /
using [^/]*
.
regmatches(x, regexpr("(?<=/).*?(?=/)", x, perl=TRUE))
#regmatches(x, regexpr("(?<=/)[^/]*(?=/)", x, perl=TRUE)) #Alternative
#[1] "Device1"
Or using [^/]*
in sub
sub("[^/]*/([^/]*)/.*", "\\1", x)
#sub("/.*", "", sub("[^/]*/", "", x)) #Alternative
#gsub("^[^/]*/|/.*", "", x) #Alternative
#[1] "Device1