我想提取给定文本中介于年份和下一个逗号之间的某些单词。 年份可能有或没有括号。请注意,年份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
左右括号的缺少”。有什么帮助吗?
这里是一种选择,方法是除去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"