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.

Expresión regular para encontrar los argumentos pasados a una función.

Para un proyecto, estoy intentando leer un archivo de Python y hacer una lista de todas las variables que se usan dentro de una función específica. Estoy leyendo las líneas del archivo de Python en formato de cadena y luego enfocándome en una línea que empieza con “def”. Para propósitos de este ejemplo, supongamos que tenemos la siguiente línea identificada:

def func(int_var:int, float_var=12.1, string_var=foo()):

Quiero usar regex o cualquier otro método para tomar los valores dentro de esta declaración de función.

Quiero capturar la cadena “int_var:int, float_var=12.1, string_var=foo()” y luego dividirla en base a las comas para obtener [“int_var:int”, “float_var=12.1”, “string_var=foo()”].

Estoy teniendo problemas para poder aislar los elementos entre los paréntesis correspondientes a ‘func’.

¡Cualquier ayuda para crear un patrón de regex sería muy apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la cadena"int_var:int,float_var=12.1,string_var=foo()", puede usar el siguiente patrón de regex:

    \((.*?)\)
    

    Este patrón busca un conjunto de paréntesis y captura todo lo que hay dentro de ellos usando el grupo (.*?). El ? hace que el grupo no sea codicioso, por lo que deja de capturar tan pronto como encuentra el paréntesis de cierre.

    Para dividir la cadena resultante en las variables individuales, puede usar el método split() en el grupo capturado, pasando una coma como delimitador:

    import re
    
    line = 'def func(int_var:int,float_var=12.1,string_var=foo()):'
    match = re.search(r'\((.*?)\)', line)
    
    if match:
        var_list = match.group(1).split(',')
        print(var_list)
    

    Esto debería dar como resultado:

    ['int_var:int', 'float_var=12.1', 'string_var=foo()']
    

    Tenga en cuenta que este patrón asume que no hay paréntesis anidados dentro de la declaración de función. Si su código tiene declaraciones de función más complejas que incluyen paréntesis anidados, es posible que deba modificar el patrón en consecuencia.

Comments are closed.