Возможно, вы можете посмотреть на уникальные шаблоны слов до и после ~, * и ^ и т. Д. И поместить их в вектор, подобный этому:
priorstrings <- c("text here", "have more here", "be more here")
afterstrings <- c("and it", "and finally", "with some")
Затем проверьте, действительно ли они уникальны, проверив,
length(unique(priorstrings)) == length(priorstrings)
length(unique(afterstrings)) == length(afterstrings)
оба имеют значение ИСТИНА.
Затем вставьте их вместе, посмотрев между ними, вот так:
fullsearches <- paste0(priorstrings, " (.*? )" , afterstrings)
Я снова использовал ваш пример строки, назвал ее y и добавил еще одну с именем z:
y <- "This string will have additional text here about things, and it will have more here regarding other stuff, and finally there will be more here near the end with some text after."
z <- "This string will have additional text here on this topic, and it will have more here to follow up, and finally there will be more here to finish with some text after."
Затем, наконец, сделайте что-то вроде этого:
sapply(list(y,z), function(x) str_match(x, fullsearches)[,2])
Это дает:
[,1] [,2]
[1,] "about things, " "on this topic, "
[2,] "regarding other stuff, " "to follow up, "
[3,] "near the end " "to finish "
Я думаю, что вы можете полностью добавить больше предшествующих строк, последующих строк и полных поисков таким образом, а также применить это к большим спискам строк.