x = "PRODUCT colgate good but not goodOKAY"
library(stringr)
str_extract(string = x, pattern = perl("(?<=PRODUCT).*(?=OKAY)"))
(?<=PRODUCT) - посмотрите за спину за PRODUCT
.* соответствует всем, кроме новых строк.
(?=OKAY) - посмотрите вперед, чтобы соответствовать OKAY.
Я должен добавить, что для этого вам не нужен пакет stingr, базовые функции sub и gsub работают нормально. Я использую stringr для согласованности синтаксиса: я извлекаю, заменяю, обнаруживаю и т.д. Имена функций предсказуемы и понятны, а аргументы находятся в последовательном порядке. Я использую stringr, потому что это избавляет меня от необходимости обращаться к документации каждый раз.
Ответ 3
Вы можете использовать gsub:
vec <- "PRODUCT colgate good but not goodOKAY"
gsub(".*PRODUCT\\s*|OKAY.*", "", vec)
# [1] "colgate good but not good"
Ответ 4
Вы можете использовать функцию rm_between из пакета qdapRegex. Он берет строку и левую и правую границы следующим образом:
x <- "PRODUCT colgate good but not goodOKAY"
library(qdapRegex)
rm_between(x, "PRODUCT", "OKAY", extract=TRUE)
## [[1]]
## [1] "colgate good but not good"
Ответ 5
Вы можете использовать пакет unglue:
library(unglue)
x <- "PRODUCT colgate good but not goodOKAY"
unglue_vec(x, "PRODUCT {out}OKAY")
#> [1] "colgate good but not good"