在特殊字符之间提取文本R

在特殊字符之间提取文本R,r,string,character,special-characters,extract,R,String,Character,Special Characters,Extract,我有多个字符串,如下所示: 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 我该怎么做?我不知道如何检测第二个“-”和最后一个句点。试试看 sub('^

我有多个字符串,如下所示:

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

我该怎么做?我不知道如何检测第二个“-”和最后一个句点。

试试看

sub('^[^-]*-[^-]*-(\\d+)\\..*$', '\\1', files)
#[1] "0" "1" "9"

数据
文件尝试以下操作:

files=c(filename, filename1, filename2)

sub(".*-(.+)\\.jpeg", "\\1", files)
你可以试试

sub("^[^-]+-[^-]+-(.*)\\.[^\\.]*$", "\\1", c(filename, filename1, filename2))
[1] "0" "1" "9"

您还可以使用
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"
> library(stringr)
> unlist(str_extract_all(x, perl("^(?:[^-]*-){2}\\K.*(?=\\.)")))
[1] "0" "1" "9"

> unlist(str_extract_all(x, perl("(?<=-)[^-.]*(?=\\.)")))
[1] "0" "1" "9"

我只需在此处使用
strsplit
相应地拆分字符串:

sapply(strsplit(files, '[-.]'), '[', 5)
# [1] "0" "1" "9"
不花哨:
substr(x
> unlist(str_extract_all(x, perl("(?<=-)[^-.]*(?=\\.)")))
[1] "0" "1" "9"
> unlist(str_extract_all(x, perl(".*-\\K\\d+")))
[1] "0" "1" "9"
sapply(strsplit(files, '[-.]'), '[', 5)
# [1] "0" "1" "9"