仅从grep返回匹配的模式

时间:2014-09-19 13:10:41

标签: regex r grep

给出R中的以下例子:

my.list<-list(a='ivw_2014_abc.pdf',b='ivw_2014_def.pdf',c='ivw_2014_ghi.pdf')

grep('(?<=ivw_2014_)[a-z]*',my.list,perl=T,value=T)

返回

                 a                  b                  c
"ivw_2014_abc.pdf" "ivw_2014_def.pdf" "ivw_2014_ghi.pdf"

我想让它返回

[1] 'abc' 'def' 'ghi'
在bash中我会使用-o选项。我如何在R中实现这一目标?

5 个答案:

答案 0 :(得分:3)

不使用任何捕获组,

> my.list<-list(a='ivw_2014_abc.pdf',b='ivw_2014_def.pdf',c='ivw_2014_ghi.pdf')
> gsub("^.*_|\\..*$", "", my.list, perl=T)
[1] "abc" "def" "ghi"

答案 1 :(得分:2)

例如:

sub('.*_(.*)[.].*','\\1',my.list)
[1] "abc" "def" "ghi"

答案 2 :(得分:0)

以下可能会引起关注:

as.character(unlist(data.frame(strsplit(as.character(unlist(data.frame(strsplit(as.character(my.list),'\\.'))[1,])), '_'))[3,]))
[1] "abc" "def" "ghi"

以下内容更易于阅读:

as.character(
    unlist(data.frame(strsplit(as.character(
        unlist(data.frame(strsplit(as.character(
            my.list),'\\.'))[1,])), '_'))[3,]))
[1] "abc" "def" "ghi"

答案 3 :(得分:0)

另一种选择是:

library(stringi)
stri_extract_first_regex(unlist(my.list), "[A-Za-z]+(?=\\.)")
#[1] "abc" "def" "ghi"

答案 4 :(得分:0)

查看regmatches函数。它适用于regexpr而不是grep,但只返回字符串的匹配部分。