我有这样的文件名作为字符向量;
filenames <- c('1194-1220-1479-891--(133.07).RDS','1194-1221-1421-891--(101.51).RDS')
不希望在pharanthesis中有数字,希望有数字"/"分离。所以期望的输出是;
filenames_desired <- c('1194/1220/1479/891','1194/1221/1421/891')
我尝试了gsub
,但不知道如何去除pharanthesis中的数字。
Thanks in advance
使用字符串,查看周围的(?=-)
含义:必须后跟一个破折号和应用:
filenames <- c('1194-1220-1479-891--(133.07).RDS','1194-1221-1421-891--(101.51).RDS')
sapply(stringr::str_extract_all(filenames, "\d+(?=-)"),
paste0,
collapse = "/")
[1] "1194/1220/1479/891" "1194/1221/1421/891"
我们可以在这里使用单个sub()
调用:
filenames <- c("1194-1220-1479-891--(133.07).RDS",
"1194-1221-1421-891--(101.51).RDS")
output <- sub("(\d+)-(\d+)-(\d+)-(\d+).*", "\1/\2/\3/\4", filenames)
output
[1] "1194/1220/1479/891" "1194/1221/1421/891"
只使用gsub
和\--.*
:删除--
之后的所有内容:
gsub('\--.*', '', filenames)
[1] "1194-1220-1479-891" "1194-1221-1421-891"
正如我所看到的,你名字的前18个字符是你名字的基础;因此,您可以使用以下代码
# Initial names
filenames <- ('1194-1220-1479-891--(133.07).RDS','1194-1221-1421-891--(101.51).RDS')
# Extract the first 18 elements of "filenames"
nam <- substr(filenames, 1, 18)
# Replace "-" by "/"
final.names <- str_replace_all(nam, "-", "/")
您可以使用strsplit
从每个列表中提取第一个元素,然后使用gsub
:
gsub('-', '/', sapply(strsplit(filenames, '--'), `[[`, 1))
将产生
#"1194/1220/1479/891" "1194/1221/1421/891"