regex - tutorial - ¿Cómo capturar múltiples grupos repetidos?
tutorial django (3)
Necesito capturar múltiples grupos del mismo patrón. Supongamos que tengo una siguiente cadena:
HELLO,THERE,WORLD
Y he escrito un siguiente patrón
^(?:([A-Z]+),?)+$
Lo que quiero que haga es capturar cada palabra, de modo que el Grupo 1 sea: "HOLA", el Grupo 2 esté "ALLÍ" y el Grupo 3 sea "MUNDO". Lo que mi expresión regular en realidad está capturando solo la última, que es " MUNDO".
Estoy probando mi expresión regular aquí y quiero usarla con Swift (¿tal vez hay una forma en Swift de obtener resultados intermedios de alguna manera, para poder usarlos?)
ACTUALIZACIÓN: No quiero usar
split
.
Solo necesito ahora cómo capturar todos los grupos que coinciden con el patrón, no solo el último.
Con un grupo en el patrón, solo puede obtener un resultado exacto en ese grupo.
Si el patrón repite su grupo de captura (utilizó el cuantificador
+
en el grupo no capturador circundante), solo se almacena el último valor que coincide con él.
Debe usar las funciones de implementación de expresiones regulares de su idioma para encontrar todas las coincidencias de un patrón, luego deberá eliminar los anclajes y el cuantificador del grupo que no captura (y también puede omitir el grupo que no captura).
Alternativamente, expanda su expresión regular y deje que el patrón contenga un grupo de captura por grupo que desee obtener en el resultado:
^([A-Z]+),([A-Z]+),([A-Z]+)$
Creo que necesitas algo como esto ...
def subject = "HELLO,THERE,WORLD"
def pat = "([A-Z]+)"
def m = (subject =~ pat)
m.eachWithIndex{ g,i ->
println "Match #$i: ${g[1]}"
}
Match #0: HELLO
Match #1: THERE
Match #2: WORLD
Que en Python3 volverá
b="HELLO,THERE,WORLD"
re.findall(''[/w]+'',b)
Solo para proporcionar un ejemplo adicional del párrafo 2 en la respuesta. No estoy seguro de lo importante que es para usted obtener tres grupos en una partida en lugar de tres partidos usando un grupo. Por ejemplo, en groovy:
[''HELLO'', ''THERE'', ''WORLD'']