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

extracting text R between special characters

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

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"

 gsub('^[^-]*-[^-]*-|\..*$', '', files)
 #[1] "0" "1" "9"

数据

files <- c(filename, filename1, filename2)

试试这个:

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"

您可以在 stringrstr_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"

> unlist(str_extract_all(x, perl(".*-\K\d+")))
[1] "0" "1" "9"

我会简单地使用 strsplit 在此处相应地拆分字符串:

sapply(strsplit(files, '[-.]'), '[', 5)
# [1] "0" "1" "9"