Использование вектора в регулярном выражении для извлечения подстрок только с известным началом и концом

#r #regex #substring #stringr

Вопрос:

Как вы используете вектор в регулярном выражении, чтобы вы могли извлечь все из вектора в другое слово?

Мне нужно извлечь несколько подстрок из серии больших строк во фрейме данных с помощью str_match. Каждая подстрока начинается с вида дерева и заканчивается словом «ссылки». Поскольку нужные мне подстроки могут начинаться с нескольких разных видов, я создал вектор под названием tree.sp, чтобы содержать все возможности.

 test.df <- data.frame(
  Heading_ChLk = c("West", 40.00, 80.00),
  Bound_Desc = c("On the Base line along the south side of section 34 T 1 N, R 29 W of the 5th PM.",
                 "Set a 1/4 section corner post from which a pine 9 inches diameter bears N 43 E 35 links and a black oak 15 inches diameter bears S 10 E 30 links",
                 "Set a post corner to sections 33 amp; 34 from which a white oak 17 inches diameter bears N 32 W 57 links and a black oak 20 inches diameter bears N 46 E 19 links.")
)

tree.sp <- c("pine|black oak|white oak")
 

Ответ №1:

Вы можете использовать str_match в качестве —

 library(stringr)

test.df$result <- str_match(test.df$Bound_Desc, sprintf('((%s).*links)', tree.sp))[, 2]
test.df$result

#[1] NA                                                                                                           
#[2] "pine 9 inches diameter bears N 43 E 35 links and a black oak 15 inches diameter bears S 10 E 30 links"      
#[3] "white oak 17 inches diameter bears N 32 W 57 links and a black oak 20 inches diameter bears N 46 E 19 links"
 

Аналогичный код str_extract также можно использовать с —

 str_extract(test.df$Bound_Desc, sprintf('(%s).*links', tree.sp))