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.

¿Cómo utilizaría expresiones regulares para ignorar múltiples paréntesis dentro de una cadena de texto?

Parece que todas las respuestas que he visto no tienen una solución fácil de leer. Aquí está la entrada con la que estoy trabajando.

(entrada de cadenas)

INSERT((AIRBUS,A340,295,137),PlaneType)
INSERT((1050,Meal,N),Flight)
INSERT((1050,10/5/2021,1/1/2021,19:20,1/1/2002,20:40,8.0),FlightLegInstance)
INSERT((SEA,Seattle, WA),AirPort)

El objetivo es usar regex para capturar los datos dentro de los paréntesis anidados.
Por ejemplo:

INSERT((AIRBUS,A340,295,137),PlaneType)

Necesito capturar “AIRBUS,A340,295,137”

Actualmente estoy usando esto para buscar lo que necesito:
regex_search(input, regex(“PlaneType”)) //Ejemplo
pero no entiendo cómo extraer los datos de adentro, porque una vez que tenga los datos, necesitaré pasárselos a una función, etc.

Cualquier ayuda es apreciada. ¡Gracias!

(Actualización)
Lo mejor que tengo hasta ahora es:
(([^)]*))

Que resulta en esto:

((AIRBUS,A340,295,137)

Así que no estoy seguro de cómo eliminar los paréntesis iniciales y finales.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para capturar los datos dentro de los paréntesis anidados, se puede utilizar la siguiente expresión regular:

    \((.*?)\)
    

    Esto buscará el paréntesis de apertura seguido de cualquier caracter (incluyendo nuevas líneas) cero o más veces, de manera perezosa. Luego, buscará el paréntesis de cierre. El ? hace que la expresión .* sea perezosa para que coincida con el número mínimo de caracteres necesarios, excluyendo así cualquier paréntesis anidado adicional.

    Para extraer los datos dentro de los paréntesis, se puede utilizar regex_search() y acceder al grupo de captura ($1) para obtener los datos:

    “`c++
    std::string input = “INSERT((AIRBUS,A340,295,137),PlaneType)”;
    std::smatch match;
    std::regex_search(input, match, std::regex(“\((.*?)\)”));
    std::string data = match[1].str();


    Esto dará como resultado la salida deseada:

    AIRBUS,A340,295,137


    Para eliminar los paréntesis inicial y final, se puede modificar la expresión regular de la siguiente manera: ```regex ^\(|\)$

    Esto coincide con el inicio de la cadena (^) seguido de un paréntesis de apertura (\() o (|) un paréntesis de cierre (\)), seguido del fin de la cadena ($). Utilizando regex_replace() con esta expresión, se pueden eliminar los paréntesis:

    “`c++
    std::string input = “((AIRBUS,A340,295,137))”;
    std::string data = std::regex_replace(input, std::regex(“^\(|\)$”), “”);


    Esto dará como resultado la salida deseada:

    AIRBUS,A340,295,137
    “`

Comments are closed.