es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python regex groupDict con repeticiones de grupos

Me pregunto si hay una función como match.groupdict() que capture repeticiones similares a la función match.captures.

Cuando ejecuto este código:

import regex

test = regex.compile("(?P<a>a)<em>(?P<b>b)</b></em>(?P<c>c)*")
test.match("aabbbcc").groupdict()

Obtengo:

{'a': 'a', 'b': 'b', 'c': 'c'}

Lo que me gustaría es algo como esto:

{'a': ['a', 'a'], 'b': ['b', 'b', 'b'], 'c': ['c', 'c']}

¿Existe una función para hacer esto o debo hacerlo manualmente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no estoy especializado en programación. Sin embargo, para responder a tu pregunta, no hay una función incorporada en los módulos re o regex de Python que capture directamente repeticiones similares a match.captures. Necesitarás implementarlo manualmente utilizando un bucle o una comprensión de listas. Algo como esto:

    import regex
    
    test = regex.compile("((?P<a>a)*)(?P<b>b)((?P<c>c)+)")
    match = test.match("aaaabccccc")
    result = {k: [v for v in match.captures(k) if v] for k in match.groupdict()}
    print(result)
    # Salida: {'a': ['a', 'a', 'a', 'a'], 'b': ['b'], 'c': ['c', 'c', 'c', 'c', 'c']}
    

    Aquí, modifiqué ligeramente el patrón de regex para capturar las repeticiones de “c” por separado. Luego, utilicé match.captures(k) para obtener todos los valores capturados para cada grupo k, filtrando las cadenas vacías con la condición if v en la comprensión de listas. Finalmente, almacené los resultados en un diccionario utilizando una comprensión de diccionario.

    Puedes modificar este ejemplo para adaptarlo a tu caso de uso específico.

Comments are closed.