我有多个字符串,如下所示:
filename="numbers [www.imagesplitter.net]-0-0.jpeg"
filename1="numbers [www.imagesplitter.net]-0-1.jpeg"
filename2="numbers [www.imagesplitter.net]-19-9.jpeg"
我希望第二个" - "之间出现的文字和最后一个时期。 我想分别获得0,1,9。
我该怎么做?我不知道如何检测第二个" - "和最后一个时期。
答案 0 :(得分:4)
尝试
sub('^[^-]*-[^-]*-(\\d+)\\..*$', '\\1', files)
#[1] "0" "1" "9"
或
gsub('^[^-]*-[^-]*-|\\..*$', '', files)
#[1] "0" "1" "9"
files <- c(filename, filename1, filename2)
答案 1 :(得分:2)
试试这个:
files=c(filename, filename1, filename2)
sub(".*-(.+)\\.jpeg", "\\1", files)
答案 2 :(得分:2)
您也可以使用regmatches
功能。
> x <- c("numbers [www.imagesplitter.net]-0-0.jpeg","numbers [www.imagesplitter.net]-0-1.jpeg", "numbers [www.imagesplitter.net]-19-9.jpeg")
> unlist(regmatches(x, gregexpr("^(?:[^-]*-){2}\\K.*(?=\\.)", x, perl=TRUE)))
[1] "0" "1" "9"
您也可以在stringr
,str_extract_all
函数中使用相同的正则表达式。
> library(stringr)
> unlist(str_extract_all(x, perl("^(?:[^-]*-){2}\\K.*(?=\\.)")))
[1] "0" "1" "9"
或强>
> unlist(str_extract_all(x, perl("(?<=-)[^-.]*(?=\\.)")))
[1] "0" "1" "9"
OR
> unlist(str_extract_all(x, perl(".*-\\K\\d+")))
[1] "0" "1" "9"
答案 3 :(得分:2)
我只需使用strsplit
来相应地拆分字符串:
sapply(strsplit(files, '[-.]'), '[', 5)
# [1] "0" "1" "9"
答案 4 :(得分:0)
你可以尝试
sub("^[^-]+-[^-]+-(.*)\\.[^\\.]*$", "\\1", c(filename, filename1, filename2))
[1] "0" "1" "9"