Вот не очень элегантный обходной путь, слишком длинный для комментариев, поэтому отправляйте его в качестве ответа. Похоже, что land
является проблемной строкой, в то время как другие могут быть извлечены с помощью str_extract_all
, как указано в комментариях.
В этом ответе я сосредоточусь на извлечении Netherland
из шаблона land
. Другой подобный пример - извлечение Sweden
на основе шаблона den
.
Вот функция для достижения этого с помощью regmatches
и regexec
:
FUNCTION
return_partials <- function(txt, problem_patterns){
ret_vec <- sapply(problem_patterns, function(z){
list_output <- regmatches(x = txt,
m = regexec(pattern = paste('[[:space:]]{0,1}?(.*', z, ')', sep = ''),
text = txt))
return(list_output[[1]][2])
})
return(unname(ret_vec))
}
OUTPUT
> return_partials(txt = txt, problem_patterns = c('land', 'den'))
[1] "Netherland" "Sweden"
Вы можете объединить его с ответом Криса Рюлеманна:
words <- c("\\bland", "Sweden", "Government and People", "Government", "People")
pattern <- str_c(words,collapse = "|")
sol1 <- unlist(str_extract_all(txt, pattern))
sol2 <- return_partials(txt = txt, problem_patterns = c('land', 'den'))
> unique(c(sol1, sol2))
[1] "Sweden" "Government and People" "Netherland"