¿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.
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();
AIRBUS,A340,295,137
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 ($
). Utilizandoregex_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(“^\(|\)$”), “”);
AIRBUS,A340,295,137
“`