Поддержание порядка извлеченных шаблонов из строк в R

#r #regex

#r #регулярное выражение

Вопрос:

Я пытаюсь извлечь шаблон из строки, но у меня возникают трудности с поддержанием порядка. Рассмотрим:

 library(stringr)
string <- "A A A A C A B A"
extract <- c("B","C")
str_extract_all(string,extract)

[[1]]
[1] "B"

[[2]]
[1] "C"
  

Результатом этого является список; возможно ли вернуть вектор, который поддерживает исходный порядок, т. Е. который "C" предшествует "B" в строке? Я перепробовал много вариантов gsub , но безуспешно. Спасибо.

Комментарии:

1. str_extract_all(string,paste0("\b(?:", paste(extract, collapse="|"), ")\b")

Ответ №1:

Попробуйте использовать следующее регулярное выражение:

 str_extract_all(string,"[BC]")
## [[1]]
## [1] "C" "B"
  

или в более общем смысле:

 str_extract_all(string, paste(extract, collapse = "|"))
  

Ответ №2:

 string <- "A A A A C A B A B"
extract <- c("B","C")

inds = unlist(sapply(extract, function(p){
    as.numeric(gregexpr(p, string)[[1]])
}))
sort(inds[inds > 0])
# C B1 B2 
# 9 13 17