
Este artículo se lo debo a Jacobo, un lector del blog, quien hace unas semanas me propuso el reto de diseñar un comodín para buscar paréntesis anidados en Word.
El problema de Jacobo buscar paréntesis anidados, como el siguiente texto:
(aaa (bbb) ccc)
porque, como bien decía Jacobo, lo correcto sería esto:
(aaa [bbb] ccc)
Es decir, bien hechas las cosas, los paréntesis internos «(» y «)» deberían ser corchetes «[» y «]».
El caso es que el documento que Jacobo tenía entre manos era de cientos de páginas, así que había que buscar ayuda cibernética y no confiarse solo de la vista y atención humanas.
⁂
Planteamiento gráfico del problema
Planteado el problema, más que dar la solución ya mismo, me interesa más que aprendas el proceso, porque de esta forma conseguirás los comodines para otros casos.
Un favor a los lectores que, como yo, entienden mejor todo con un gráfico, se trata de encontrar este texto:

En realidad, para encontrar paréntesis anidados, solo hace falta encontrar dos paréntesis seguidos, sin un paréntesis intermedio. Por ejemplo, podríamos intentar encontrar dos paréntesis de apertura sin un paréntesis de cierre entremedias.
O, de forma alternativa, podríamos buscar dos paréntesis de cierre consecutivos.
Una u otra forma son igual de buenas y hay que elegir una de ellas, así que vamos a continuar con esta última: encontrar un comodín que busque un paréntesis de cierre, letras y otro paréntesis de cierre.
¿Estamos de acuerdo en que buscamos la parte final de la anterior ilustración?
Antes de empezar, puedes comprobar la nomenclatura de colores empleada en estos artículos de Word.
Nomenclatura de colores
- los patrones de búsqueda irán sobre fondo rojo, por ejemplo, (Gond[uw]ana);
- cada patrón encontrará una cadena, por ejemplo Gonduana, sobre fondo de color azul;
- si un patrón NO encuentra una cadena, por ejemplo Pangea, se marcará sobre un fondo de color gris;
- el patrón de sustitución, por ejemplo Blog \1, irá sobre fondo amarillo;
- la cadena final sustituida será Blog Gonduana, e irá sobre fondo de color verde.
Ahora sí, ya podemos empezar a diseñar nuestro comodín de Word…
⁂
Comodín para buscar paréntesis anidados en Word
El comodín que encuentra un paréntesis de cierre es muy sencillo:
[)]
El comodín que encuentra una o varias letras, tanto mayúsculas como minúsculas, es:
[a-zA-Z]{1;}
Si además de letras, queremos incluir números, espacios y signos de puntuación, el comodín sería:
[)][a-zA-Z0-9 ,.;:]{1;}
Para encontrar el segundo paréntesis de cierre, ya sabemos el comodín de Word:
[)]
Y todo junto es el comodín que queremos:
[)][a-zA-Z0-9 ,.;:]{1;}[)]
Que encontrará:
(aaa (bbb) ccc)
Aquí podríamos dar por concluida la tarea, porque ya tenemos el comodín para encontrar de forma automática los paréntesis anidados, que resuelve el problema de Jacobo.
Pero surge la duda razonable de si podríamos realizar también el cambio de forma automática; es decir, reemplazar los paréntesis internos por corchetes.
Pues esto es lo que vamos a ver en la siguiente sección:
⁂
Comodín para reemplazar los paréntesis anidados en Word
Volviendo a la ilustración del principio del artículo:

Ahora queremos un comodín más largo, que encuentre el primer paréntesis de apertura y termine en el segundo paréntesis de cierre. Es un comodín tan sencillo como antes, pero más largo. Que su longitud no te nuble la razón:
En este orden, queremos un comodín que nos encuentre:
- un primer paréntesis de apertura;
- texto;
- otro paréntesis de apertura;
- texto;
- un paréntesis de apertura;
- texto;
- un primer paréntesis de cierre;
- texto;
- el segundo paréntesis de cierre.
Donde dice «texto», hay que entender lo mismo que antes: letras, números, espacios y signos de puntuación.
Esta vez escribo el comodín de una sola vez, porque la filosofía es la misma que para el anterior comodín:
[(][a-zA-Z0-9 ,.;:]{1;}[(][a-zA-Z0-9 ,.;:]{1;}[)][a-zA-Z0-9 ,.;:]{1;}[)]
Ahora bien, como vamos a necesitar reemplazar los paréntesis internos, hay que dividir el anterior comodín en varios trozos para poder referirnos a ellos en el patrón de sustitución.
Con los comodines, si recuerdas, la forma de diferenciar textos es con parejas de paréntesis. Si necesitas el porqué, aquí tienes el enlace a la teoría de comodines. No dudes en echarle un vistazo…
Si me has seguido hasta aquí, hay que colocar algunos paréntesis entremedias para que el siguiente comodín encuentre los paréntesis anidados en Word:
([(][a-zA-Z0-9 ,.;:]{1;})[(]([a-zA-Z0-9 ,.;:]{1;})[)]([a-zA-Z0-9 ,.;:]{1;}[)])
y nos permita reemplazarlos después con el siguiente patrón de sustitución:
\1[\2]\3
Como ves, dejamos intactas la primera, segunda y tercera referencias, mientras que los paréntesis internos se sustituyen por corchetes.
Se entiende, ¿verdad?
Para que conste, en Word deberías tener así el cuadro de diálogo Buscar y Reemplazar:

Recuerda marcar la casilla Usar caracteres comodín (o Word jamás te encontrará un paréntesis anidado).
⁂
Lo que NO encuentra este comodín
Los comodines anteriores pueden parecer la piedra filosofal, pero siempre conviene ver en qué casos no funcionan.
Yo he encontrado que el primer comodín no encuentra lo que queremos cuando los paréntesis de cierre son consecutivos, sin texto intermedio:
(aaa (bbb))
Quiero que entiendas que a veces es imposible encontrar un comodín que sirva para todo. Más bien, se trata de encontrar el comodín más generalista posible y luego encontrar otro comodín para ir «peinando» la casuística.
Conclusiones
Si quieres el comodín para buscar paréntesis anidados en Word:
- Abre el cuadro de diálogo Buscar y Reemplazar de Word.
El atajo habitual el CTRL+B.
- En el cuadro de texto Buscar, escribe:
[)][a-zA-Z0-9 ,.;:]{1;}[)]
- Pulsa el botón Buscar
Además, tienes el comodín para reemplazar los paréntesis anidados por corchetes de forma automática.
⁂
Si no te quieres perder ningún artículo de Gonduana, suscríbete al boletín del blog con el siguiente formulario o sígueme en LinkedIn, Facebook o Twitter (@jssprt). De esta manera, serás el primero en enterarte de las siguientes publicaciones.
Si quieres leer otros artículos sobre comodines de Word de Gonduana, los tienes todos si filtras por «comodines» en la nube de etiquetas del blog.
Para los casos en los que coincidan en el texto 2 paréntesis de apertura al principio o 2 paréntesis de cierre al final, así como para el resto de los casos que se indican, se podría hacer con la siguiente expresión:
([(]*)[(](*)[)](*[)])
El patrón de reemplazamiento sería el mismo:
\1[\2]\3
Encontraría:
(aaa (bbb) ccc) / ((bbb) ccc) / (aaa (bbb))
La única pega del este sistema (y del que se explica en el post) es que solo vale cuando hay un solo grupo de texto entre paréntesis englobado dentro de otros paréntesis. Es decir, no serviría, por ejemplo, para:
(aaa (bbb) (ccc) (ddd) eee)
Hola, Jokin:
Gracias por tu contribución. Siempre vienen bien otras ideas y otras formas de hacer las cosas.
Veo que tu comodín de búsqueda funciona, pero pero pero… Tiene una gran desventaja: encuentra cosas incluso en párrafos distintos.
Por ejemplo, encontrará casos como este:
aaa (bb) cccc
Otro párrafo aquí en medio
ddd (eee) fff (ggg)
Y es que el asterisco de Word es un comodín muy potente, pero de doble filo.
Lo dicho: muchas gracias por la idea y seguro que ayuda a alguien.
Un fuerte abrazo,
… Jesús Prieto …
Gracias Jesús. Tu comentario es totalmente acertado. No he caído en ese detalle importante.
La verdad es que intenté adaptar (con poco éxito) una expresión regular que utlizo en el Writer de Open Office que, por cierto, aprovecho para comentar, tiene algunas opciones de búsqueda y reemplazamiento muy interesantes que Word no incorpora. Por ejemplo, la posibilidad de reemplazar, como atributo de texto, minúsculas, mayúsculas, estilo título, versalitas. También tiene un comodín que funciona como un operador lógico OR.
La verdad es que para esto de las busquedas y reemplazamientos yo trabajo a caballo entre Word de Microsoft y Writer de Open Office. En parte son parecidos y en parte muy distintos. Yo intento aprovechar de cada uno las características que me interesan en cada ocasión.
Gracias por tu aportación, Jokin, y no veas lo que te envidio por lo que dices sobre el programa Writer, porque lo desconozco del todo.
Un abrazo,
… Jesús Prieto …