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

时间:2015-04-16 15:55:58

标签: 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。

我该怎么做?我不知道如何检测第二个" - "和最后一个时期。

5 个答案:

答案 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"

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

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"