如何在R中提取多字?

问题描述 投票:1回答:1

我想提取给定文本中介于年份和下一个逗号之间的某些单词。 年份可能有或没有括号。请注意,年份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 ="|")

str_extract_all(txt, str_c("(?<=\\(\\d{4}\\)\\s)(", pattern, ")(?=,)"))[[1]]给我:

#  "Mining"          "J. Data Science"

但是答案应该是:

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

考虑到1998左右括号的缺少”。有什么帮助吗?

r text stringr
1个回答
2
投票

这里是一种选择,方法是除去4位数字年的括号,然后使用不带()的OP格式,>

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" 
    
© www.soinside.com 2019 - 2024. All rights reserved.