给出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中实现这一目标?
答案 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
,但只返回字符串的匹配部分。