stringr::str_extract 列表 R 的所有元素

stringr::str_extract all elements of a list R

我正在尝试获取给定对象的所有“banana + 单词”出现次数,但 str_extract returns 只是第一次出现。我的代码:

all_terms <- c("banana word2 word3 word4 banana split word2 word3 word4",
               "x y z",
               "banana ice cream")

banana_terms <- all_terms %>% 
  str_extract("banana.+") %>% 
  word(1,2)


banana_terms
Out: [1] "banana word2" NA             "banana ice"  

我想要的:

Out: [1] "banana word2" "banana split", "banana ice" 

使用str_extract_all\w+得到banana(和banana)后面的单词。

all_terms %>% 
  str_extract_all("banana.\w+") %>% 
  unlist()

# [1] "banana word2" "banana split" "banana ice"

没有unlist,你得到一个列表:

str_extract_all(all_terms, "banana.\w+")

[[1]]
[1] "banana word2" "banana split"

[[2]]
character(0)

[[3]]
[1] "banana ice"

如果您想使用 str_extract,您需要确保每个“香蕉词”都是向量中的一个单独元素。

str_split 用于将每个“空 space” + “香蕉”模式 (" (?=banana)") 拆分为单个元素。然后使用@Maël 在 str_extract.

中提供的正则表达式 (banana.\w+)

最后,删除向量中的NA

library(stringr)

all_banana <- str_extract(str_split(all_terms, " (?=banana)", simplify = T), "banana.\w+")
all_banana <- all_banana[!is.na(all_banana)]

all_banana
[1] "banana word2" "banana ice"   "banana split"

base R中,我们可以使用regmatches/gregexpr

unlist(regmatches(all_terms, gregexpr("banana\s+\S+", all_terms)))
[1] "banana word2" "banana split" "banana ice"