У меня есть следующая строка: "PRODUCT colgate good but not goodOKAY"
Я хочу извлечь все слова между PRODUCT
и OKAY
У меня есть следующая строка: "PRODUCT colgate good but not goodOKAY"
Я хочу извлечь все слова между PRODUCT
и OKAY
Это можно сделать с помощью sub
:
s <- "PRODUCT colgate good but not goodOKAY"
sub(".*PRODUCT *(.*?) *OKAY.*", "\\1", s)
даяние:
[1] "colgate good but not good"
Нет пакетов.
Вот визуализация регулярного выражения:
.*PRODUCT *(.*?) *OKAY.*
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
, потому что это избавляет меня от необходимости обращаться к документации каждый раз.
Вы можете использовать gsub
:
vec <- "PRODUCT colgate good but not goodOKAY"
gsub(".*PRODUCT\\s*|OKAY.*", "", vec)
# [1] "colgate good but not good"
Вы можете использовать функцию 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"
Вы можете использовать пакет unglue:
library(unglue)
x <- "PRODUCT colgate good but not goodOKAY"
unglue_vec(x, "PRODUCT {out}OKAY")
#> [1] "colgate good but not good"