#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