regex - Extraindo uma string entre outras duas strings em R



stringr (2)

Aqui está outra maneira de usar a base R

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

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

Saída:

[1] "GET_ME"

Eu estou tentando encontrar uma maneira simples de extrair uma substring desconhecido (poderia ser qualquer coisa) que aparecem entre duas substrings conhecidas. Por exemplo, eu tenho uma string:

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

Eu preciso extrair a string GET_ME que está entre STR1 e STR2 (sem os espaços em branco).

Estou tentando str_extract(a, "STR1 (.+) STR2") , mas estou recebendo o jogo inteiro

[1] "STR1 GET_ME STR2"

É claro que posso remover as strings conhecidas, para isolar a substring de que preciso, mas acho que deve haver uma maneira mais clara de fazer isso usando uma expressão regular correta.


Answer #1

Outra opção é usar qdapRegex::ex_between para extrair strings entre os limites esquerdo e direito

qdapRegex::ex_between(a, "STR1", "STR2")[[1]]
#[1] "GET_ME"

Também funciona com várias ocorrências

a <- "anything STR1 GET_ME STR2, anything goes here, STR1 again get me STR2"

qdapRegex::ex_between(a, "STR1", "STR2")[[1]]
#[1] "GET_ME"       "again get me"

Ou vários limites esquerdos e direitos

a <- "anything STR1 GET_ME STR2, anything goes here, STR4 again get me STR5"
qdapRegex::ex_between(a, c("STR1", "STR4"), c("STR2", "STR5"))[[1]]
#[1] "GET_ME"       "again get me"

A primeira captura é entre "STR1" e "STR2", enquanto a segunda entre "STR4" e "STR5".





stringr