Вот базовая опция R с использованием strsplit
.Мы можем попытаться разбить следующий шаблон:
(?<=NUT|CHANNEL|DIA|CARBON|STEEL)|(?<=.)(?=NUT|CHANNEL|DIA|CARBON|STEEL)
Это разделит, если в любой точке строки то, что предшествует или следует, является одним из ваших ключевых слов.Обратите внимание, что термин (?<=.)
необходим из-за того, как ведут себя позитивные прогнозисты в strsplit
.
terms <- c("NUT", "CHANNEL", "DIA", "CARBON", "STEEL")
regex <- paste(terms, collapse="|")
a <- "NUTCHANNELDIA 16U NCCARBONSTEEL"
strsplit(a, paste0("(?<=", regex, ")|(?<=.)(?=", regex, ")"), perl=TRUE)
[[1]]
[1] "NUT" "CHANNEL" "DIA" " 16U NC" "CARBON" "STEEL"
Демо
У термина 16U NC
есть пробел, который я не пытался удалить.Если это вас беспокоит, вы можете либо сократить пробелы в каждом термине, когда вы его употребляете, либо мы можем попытаться изменить шаблон, чтобы сделать это.