Извлечение строки между двумя другими строками в 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"