R stringr regex para extraer caracteres entre corchetes
Estoy tratando de utilizar regex en R para extraer la cadena completa dentro de corchetes, donde los corchetes contienen una palabra clave:
library(stringr)
test <- "asdf asiodjfojewl kjwnkjwnefkjnkf [asdf] fasdfads fewrw [keyword<1] keyword [keyword>1]"
Debería devolver:
keyword<1 # está bien si también devuelve [keyword<1] con los corchetes
keyword>1
Mi intento devuelve todas las letras individualmente y excluye el número de los corchetes.
# mi intento
str_extract_all(test, regex("\\[keyword<.*?\\]"))
[[1]]
[1] "[k" "e" "y" "w" "o" "r" "d" "<" "1" "[k" "e"
[12] "y" "w" "o" "r" "d" ">" "1" "]"
davy.ai
Para extraer la cadena completa dentro de corchetes donde los corchetes contienen la palabra clave, puedes usar las afirmaciones de lookbehind y lookahead positivas en una expresión regular. Aquí tienes el código que debería funcionar:
Desglosemos este patrón de expresión regular:
(?<=\\[)
: Esta es una afirmación de lookbehind positiva que busca el corchete de apertura “[” pero no lo incluye en la coincidencia.(?=.*keyword)
: Esta es una afirmación de lookahead positiva que verifica si la palabra “keyword” existe en cualquier parte dentro de los corchetes..*?
: Esta expresión no codiciosa coincide con cualquier caracter (excepto nueva línea) cero o más veces, hasta la primera coincidencia de la parte siguiente del patrón.(?=\\])
: Esta es una afirmación de lookahead positiva que busca el corchete de cierre “]”, pero no lo incluye en la coincidencia.Al combinar estas afirmaciones y expresiones, podemos extraer las cadenas deseadas. La salida del código anterior sería:
Ten en cuenta que esto incluye los corchetes alrededor de las palabras clave. Si quieres excluirlos, puedes modificar el patrón de la siguiente manera:
Esto solo coincidirá con el texto dentro de los corchetes, sin incluir los corchetes en sí: