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

Я пытаюсь найти простой способ извлечь неизвестную подстроку (может быть что угодно), которая появляется между двумя известными подстроками. Например, у меня есть строка:

a<-" anything goes here, STR1 GET_ME STR2, anything goes here"

Мне нужно извлечь строку GET_ME, которая находится между STR1 и STR2 (без пробелов).

Я пытаюсь str_extract(a, "STR1 (.+) STR2"), но получаю весь матч

[1] "STR1 GET_ME STR2"

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

Ответ 1

Вы можете использовать str_match со str_match STR1 (.*?) STR2 (обратите внимание, что пробелы являются "значимыми", если вы хотите просто сопоставить что-либо между STR1 и STR2 используйте STR1(.*?)STR2). Если у вас есть несколько вхождений, используйте str_match_all.

library(stringr)
a<-" anything goes here, STR1 GET_ME STR2, anything goes here"
res <- str_match(a, "STR1 (.*?) STR2")
res[,2]
[1] "GET_ME"

Еще один способ, использующий regexec базы R (чтобы получить первое совпадение):

test = " anything goes here, STR1 GET_ME STR2, anything goes here STR1 GET_ME2 STR2"
pattern="STR1 (.*?) STR2"
result <- regmatches(test,regexec(pattern,test))
result[[1]][2]
[1] "GET_ME"

Ответ 2

Здесь другой способ с использованием базы R

a<-" anything goes here, STR1 GET_ME STR2, anything goes here"

gsub(".*STR1 (.+) STR2.*", "\\1", a)

Выход:

[1] "GET_ME"