簡體   English   中英

僅從 grep 返回匹配的模式

[英]Return only matched pattern from 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 中實現這一點?

不使用任何捕獲組,

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

例如 :

sub('.*_(.*)[.].*','\\1',my.list)
[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"

以下更容易閱讀:

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

另一種選擇是:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM