如何提取R中的多字?

如何提取R中的多字?,r,text,stringr,R,Text,Stringr,我想在给定的文本中提取位于年和以下逗号之间的某些单词年份可能有也可能没有开始和结束括号。请注意,1998年没有开始和结束括号,而2020年和2015年没有开始和结束括号 library(stringr) txt <- "Mining exercise (2020) Mining, p. 628; Computer Science text 1998 Computer Science, p.345-355; Data mining (2015) J. Data Science, pp. 31

我想在给定的文本中提取位于年和以下逗号之间的某些单词年份可能有也可能没有开始和结束括号。请注意,1998年没有开始和结束括号,而2020年和2015年没有开始和结束括号

library(stringr)
txt <- "Mining exercise (2020) Mining, p. 628; Computer Science text 1998 Computer Science, p.345-355; Data mining (2015) J. Data Science, pp. 31-33"
comp <- c("Mining", "Computer Science", "J. Data Science")
pattern <- str_c(comp,collapse ="|")
但答案应该是:

# "Mining"  "Computer Science"  "J. Data Science" 

考虑到
1998
周围没有的开始括号和结束括号。有什么帮助吗?

这里有一个选项,删除4位数年份周围的括号,然后使用OP模式,而不使用
()

库(stringr)
str_extract_all(str_replace_all(txt),“\\((\\d{4})\\)”,“\\1”),
str_c(“(?Try
unlist(str_-extract_-all)(txt,str_c(”)?
# "Mining"  "Computer Science"  "J. Data Science" 
library(stringr)
str_extract_all(str_replace_all(txt, "\\((\\d{4})\\)", "\\1"),
     str_c("(?<=\\d{4}\\s)(", pattern, ")(?=,)"))[[1]]
#[1] "Mining"           "Computer Science" "J. Data Science" 
str_extract_all(txt, str_c("(?<=\\(?\\d{4}\\)?\\s)(", pattern, ")(?=,)"))[[1]]
#[1] "Mining"           "Computer Science" "J. Data Science"