¿Extraer coincidencias de grupos de captura de expresiones regulares? (o: ¿dónde está gregexec?)
Dada una expresión regular que contienegrupos de captura (paréntesis) y una cadena, ¿cómo puedo obtenertodos las subcadenas que coinciden con los grupos de captura, es decir, las subcadenas usualmente referenciadas por "\ 1", "\ 2"?
Ejemplo: considere un regex que captura dígitos precedidos por "xy":
s <- "xy1234wz98xy567"
r <- "xy(\\d+)"
Resultado deseado:
[1] "1234" "567"
Primer intento:gregexpr
:
regmatches(s,gregexpr(r,s))
#[[1]]
#[1] "xy1234" "xy567"
No es lo que quiero porque devuelve las subcadenas que coinciden con todo el patrón.
Segundo intento:regexec
:
regmatches(s,regexec("xy(\\d+)",s))
#[[1]]
#[1] "xy1234" "1234"
No es lo que quiero porque vuelve.solamente la primera aparición de una coincidencia para todo el patrón y el grupo de captura.
Si hubiera ungregexec
función, extendiendoregexec
comogregexpr
se extienderegexpr
, mi problema estaría resuelto.
Entonces, la pregunta es: cómo recuperar todas las subcadenas (o índices que se pueden pasar aregmatches
como en los ejemplos anteriores) ¿coinciden los grupos de captura en una expresión regular arbitraria?
Nota: el patrón parar
dado lo anterior es solo un ejemplo tonto, debe seguir siendo arbitrario.