GREP son las siglas de General Regular Expression Parser (que vendría a traducirse como Analizador de Expresiones Regulares Generales). Una expresión regular es un modo de describir patrones o condiciones que debe cumplir el texto, y que no tienen por qué incluir necesariamente una palabra o carácter. GREP permite llevar a cabo operaciones de búsqueda y reemplazo de texto basadas en esos patrones y condiciones.
La diferencia fundamental entre una búsqueda de texto y una búsqueda GREP es que la primera busca un texto exacto (literal) y lo reemplaza por otro texto exacto. Por ejemplo, reemplazar todas las instancias de “jarra” por “jarrón”. Sin embargo, una búsqueda GREP puede buscar cualquier instancia de “jarra”, “jarrón”, “vasija” o “ánfora” y reemplazarlas por “recipiente” en una única operación Buscar/Cambiar.
GREP busca, por lo tanto, patrones. Por ejemplo, ¿cómo buscarías un párrafo? Un párrafo es cualquier número de caracteres seguidos por un retorno. Eso es un patrón. Dos párrafos serían un conjunto de caracteres seguidos de un retorno seguido de otro conjunto de caracteres seguidos de otro retorno. A GREP no le interesa qué letras o palabras componen los dos párrafos; a GREP sólo le interesa el patrón.
De hecho, probablemente hayas estado utilizando patrones GREP sin saberlo. En el cuadro de diálogo Buscar/Cambiar, cada vez que marcas las opciones «coincidir Mayúsculas/minúsculas» o «sólo palabras completas» se activan ciertos patrones de búsqueda idénticos a los utilizados por GREP. Supón que estás buscando «gata». Si no marcas la casilla «coincidir Mayúsculas/minúsculas» estarás utilizando un patrón de búsqueda que vendría a decir: busca G o g, A o a, T o t y A o a. Si marcas la casilla «sólo palabras completas», entonces buscará el conjunto de caracteres «gata» rodeado de espacios en blanco o signos de puntuación; en este caso, el programa utiliza caracteres especiales, denominados metacaracteres, situados antes y después de la palabra, para efectuar correctamente la búsqueda.
Lo que hace de GREP un sistema poco intuitivo al principio es la necesidad de describir un patrón de búsqueda. Considera el siguiente ejemplo: buscar palabras que empicen por la letra «M» y acaben por la letra «o», con cualquier número de letras entre ambas. ¿Qué es exactamente lo que hay que introducir entre la “M” y la “o” que signifique «cualquier número de letras»? Pues eso será lo que aprenderás en este primer artículo.
Cómo utilizar GREP en InDesign
La segunda pestaña del cuadro de diálogo Buscar/Cambiar cotiene las opciones de búsqueda GREP.

Escribir patrones de búsqueda
Existen dos formas de escribir un patrón de búsqueda: escribir directamente los caracteres especiales y cadenas de texto o utilizar las opciones que ofrece el menú desplegable situado a la derecha de los cuadros «Buscar» y «Cambiar a». Mi consejo es que empieces a familiarizarte con las diferentes opciones de búsqueda que ofrece el programa mediante la utilización del menú desplegable, pero conforme vayas dominando la técnica, verás que resulta mucho más sencillo escribir directamente el patrón de búsqueda. Puedes imprimir como referencia la página de ayuda del programa que muestra todos los caracteres especiales así como una breve explicación de su funcionamiento. Con el tiempo, cuando te hayas convertido en un auténtico maestro, descubrirás con asombro que la implementación de búsquedas GREP es todavía más potente de lo que a simple vista deja entrever la escueta ayuda del programa en lo referente a este tema.
Metacaracteres
La gran mayoría de caracteres alfanuméricos y signos de puntuación que introduzcas en el cuadro de búsqueda coinciden consigo mismos. Es decir, si escribes «abc» como patrón de búsqueda, InDesign encontrará los caracteres a, b y c. Se dice, por tanto, que tienen un significado literal. Sin embargo, existe otro grupo de caracteres, denominados metacaracteres, sin significado literal, que se utilizan para indicar al programa diferentes opciones de búsqueda. Por ejemplo, el signo + se utiliza en GREP para indicar que la búsqueda puede contener uno o más caracteres situados inmediatamente a la izquierda del signo. El patrón 1+ encontrará el número 1 una o más veces: 1, 11, 1111 o 1111.
¿Qué sucede cuando queremos incluir el propio signo + como un carácter literal del patrón de búsqueda? Debemos indicar al programa que deje de funcionar como metacarácter. Se utiliza otro metacaracter, la contrabarra (). Y como es posible que alguna vez desees buscar a la propia contrabarra, bastará con introducir dos veces seguidas este metacaracter.
Así, para incluir el signo + en la búsqueda, utilizarás el patrón +. Para buscar la contrabarra, el patrón será \. Para buscar 1+1 debes introducir el siguiente patrón de búsqueda: 1+1. Y para buscar 1+1 o 1+11 el patrón será 1+1+
Los distintos metacaracteres llevan a cabo diferentes grupos de funciones, de manera que pueden ser organizados por tipos: comodines, metacaracteres que controlan la ubicación de otros caracteres y metacaracteres que controlan la repetición de otros caracteres.
Comodines
Un comodín es un metacarácter que se utiliza para encontrar otros caracteres. Los comodines más utilizados son los siguientes:
Metacarácter | Encuentra |
. | Cualquier carácter exceptuando el fin de párrafo |
^ | Principio de línea |
$ | Fin de línea |
Ser capaz de especificar la ubicación del patrón de búsqueda es una de las características más útiles de GREP. Por ejemplo, imagina que deseas encontrar todos los diálogos de Arturo en el siguiente texto:
- Arturo: ¿Cuánto te debo?
- Marta: Ya sabes que invita la casa, Arturo.
- Arturo: Pero es que esta vez quiero pagar.
- Marta: Si insistes…
Si haces una búsqueda normal e introduces Arturo, InDesign se detendrá en las líneas 1, 2 y 3, cada vez que encuentre la palabra Arturo. Pero si utilizas el panel GREP e introduces el patrón ^Arturo, InDesign sólo señalará las líneas 1 y 3, puesto que sólo en ellas la palabra Arturo se encuentra a principio de párrafo.
Ten en cuenra que ^ y $ no encuentran ningún carácter, solo la posición del texto. Si utilizas el metacarácter $ detrás de una palabra, el resultado será la palabra situada justo ANTES del final de la línea. Si deseas incluir también el carácter de retorno de carro, deberás utilizar r al final de la palabra.
Puedes combinar los dos metacaracteres de ubicación en un misma búsqueda para encontrar sólo palabras o frases completas. Por ejemplo:
^patata$
Sólo se detendrá en la segunda línea del siguiente texto:
- patatero
- patata
- patata frita
Otros metacaracteres de ubicación
A parte de los ya mencionados en el apartado anterior, existen otros cuatro metacaracteres posicionales, a saber:
Metacarácter | Encuentra |
< | Inicio de palabra |
> | Fin de palabra |
b | Límite de palabra. Es decir, cualquier posición que delimite una palabra |
B | Contrario de límite de palabra. Cualquier posición que no esté dentro del límite de palabra |
Veamos unos ejemplos de estos metacaracteres en acción.
- La búsqueda: bfocab
- Encontrará: pato foca pingüino enfocar
- La búsqueda: bJonhsonb
- Encontrará: la taberna Jonhson’s Inn
- La búsqueda: Bfoca
- Encontrará: la foca no puede enfocar porque no tiene dedos
- La búsqueda: bfocaB
- Encontrará: foca focalizado enfocar
Metacaracteres delimitadores del rango de caracteres
Los corchetes [ y ] permiten especificar un rango o conjunto de caracteres a encontrar. Para excluir o ignorar un conjunto de caracteres de la búsqueda, debes incluir el acento circunflejo ^ justo después del corchete de apertura. Para especificar un rango de caracteres, utiliza el guión -. Por ejemplo:
- La búsqueda: [abc]
- Encontrará: cualquiera de los caracteres a, b, c
- La búsqueda: [^abc]
- Encontrará: cualquier carácter excepto a, b, c
- La búsqueda: [a-z]
- Encontrará: cualquier carácter comprendido entre la a y la z.
Puedes utilizar cualquier número de caracteres o rangos entre los corchetes. Por ejemplo:
- La búsqueda: [aeiou]
- Encontrará: cualquier vocal
- La búsqueda: [^aeiou]
- Encontrará: cualquier carácter que no sea una vocal
Conclusión:
En conclusión, GREP (General Regular Expression Parser) es una herramienta poderosa para buscar y reemplazar texto basado en patrones y condiciones, que pueden ir más allá de las simples palabras o caracteres. La diferencia clave entre la búsqueda de texto normal y la búsqueda GREP radica en la capacidad de esta última para identificar y manipular patrones complejos. Aunque puede parecer poco intuitivo al principio, dominar los patrones GREP permite realizar búsquedas y reemplazos más flexibles y eficientes en documentos.
82 comentarios. Dejar nuevo
En primer lugar, gracias por compartir esta información sobre las búsquedas GREP en InDesign, que es un tema poco documentado en español.
Me llamó la atención algo que se menciona en el primer párrafo del artículo:
«Con GREP podrás buscar y manipular patrones de texto a tu antojo: ordenar alfabéticamente una lista …»
Hasta donde yo sé, una simple operación de búsqueda y cambio con expresiones regulares no basta para ordenar listas alfabéticamente. Quisiera pedir al autor del artículo que aclare más esto, o cuando menos dar como ejemplo alguna expresión regular que permita ordenar alfabéticamente.
Efectivamente, no existe ninguna expresión GREP que de por sí sea capaz de ordenar alfabéticamente una lista… Sin embargo, esta frase, tal vez demasiado «espectacular» y poco afortunada, la escribí justo después de usar una expresión GREP que luego me permitió ordenar alfabéticamente una lista de nombres. A saber. Contaba yo con una lista de autores del tipo: Carlos Pérez, Juan González, etc. Con GREP cambié el orden, de manera que la lista quedó como Pérez, Carlos; González, Juan; y así sucesivamente. Luego, bastó con utilizar el script SortParagraphs.jsx (por defecto en la instalación) y ¡listos!
Hola Javier, muchas gracias por el aporte.
Estoy tratando justamente de hacer algo parecido a tu ejemplo (cambiar Carlos Pérez por Pérez, Carlos) pero hasta ahora no le encuentro solución.
Específicamente estoy haciendo un diccionario Alemán-Español y quisiera invertirlo a Español-Alemán… estoy seguro que se debe poder, pero cómo!? Seguro me podrás ayudar, desde ya muchas gracias.
Te paso un extracto para que puedas ver concretamente de qué hablo:
Herausgeber (der)= editor, emisor.
hervorgehoben= poner de relieve, destacar.
Hochachse= eje vertical.
inwieweit= en qué medida, hasta dónde.
Karo-Muster= cuadriculado.
y el II para cuando, excelente introducción a estilos GREP, espero en realidad el aporte II, saludos desde México
Últimamente andamos tan liados que nos cuesta publicar. Pero ya está cerca, de verdad…
Hola, me ha parecido muy interesante tu información. Me preguntaba si tenías idea de cómo invertir en un libro las referencias y el punto. Espero poder explicarme: este libro está lleno de referencias de una a diez cifras y cada una puede tener uno o dos dígitos.
Ejemplo:
ventrículoˇ2, 34, 8.
Lo que yo quisiera es cambiar el punto antes de los dígitos:
ventrículo.ˇ2, 34, 8
He buscado mil y un formas de hacer este cambio de una sola vez, pero entonces si paso el punto antes, éste se pone en superíndice y el último dígito queda en posición normal.
Creo que es importante señalar que deberá quedar punto y seguido, o punto y aparte dependiendo del cuál sea su caso.
Espero puedas apoyarme, gracias.
Puedes hacer un buscar/cambiar con GREP y aplicar un estilo anidado para que no quede el punto como superíndice, o bien hacer posteriormente un buscar/cambiar por formato, de manera que cada vez que encuentre un punto como superíndice lo deje como texto normal.
Hola, antes que nada muy buen aporte.
Me parece muy interesante y por lo mismo quisiera me orientaras. Necesito sistituir una silaba: fi por la misma fi pero con el tracking más amplio. ¿Cómo le puedo hacer?
Muchas gracias, saludos!!
Dos formas de hacerlo:
1) creas un estilo de carácter con el ajuste de tracking que te interese y luego haces un estilo GREP que lo aplique. El término a buscar debe ser este:
f(?=i)
De esta manera, estás buscando una f seguida de una i, pero no incluyes la i, de manera que el estilo de carácter con el tracking modificado sólo se aplicará a la letra f, aumentando de este modo el espacio entre la f y la i (si no lo haces así, y buscas directamente «fi», entonces también aumentarás el espacio entre la letra i y la que le siga).
2) Buscar una «fi» y reemplazar por «f» seguido de espacio ultrafino seguido de «i»
También se evita que se pierda el punto de la «i» activando o desactivando la opción LIGADURA cuando hagas tu estilo o en la opciones de caracter
Hola. Muy buen documento, me ha sido muy útil.
¿Me podrías ayudar con algo?
Necesito encontrar en un documento todas las palabras que, al final de una linea de texto sean iguales. Es decir:
Logró exitosamente su cometido captando la atención de todos los primeros minutos minutos ese tiempo la gente comenzó a distraerse: a hablar entre ellos, minutos
errores en el folleto del minutos
Encontrar todas las palabras repetidas (en este caso minutos) al final de las lineas de texto. Pero no quiero encontrar la palabra minutos, sino las palabras repetidas al final de las lineas. Ojala me puedas ayudar. Saludos.
Me temo que no entiendo lo que quieres hacer, ¿tal vez porque no has puesto un punto al final de cada frase? Por lo que entiendo, lo que quieres buscar es ¿todas las palabras que se repiten al final de un párrafo y que son consecutivas?.
Por ejemplo:
El oso y el ratón
el gato y el ratón
En este caso, quieres encontrar la palabra ratón ¿no?
Y si la encuentras, ¿qué quieres hacer con ella? ¿O quieres ir encontrando una a una y luego decidir qué hacer con ella?
Hola a todos, muchas gracias por lo aprendido hasta acá.
Tengo un problema particular que quizá se pueda resolver con GREP. Estoy haciendo un pequeño diccionario Alemán-Español para un examen y me gustaría invertir el orden (a Español-Alemán) automáticamente, el tema que la solución Find what: (w+)s(w+) Change to: $2, $1 que resuelve el ejemplo «Juan Pérez > Pérez, Juan» arriba mencionado no me alcanza porque las definiciones son más complejas, por ejemplo:
—————————————————–
Haupteil (der)= parte principal.
herausgeben= publicado, editado.
Herausgeber (der)= editor, emisor.
hervorgehoben= poner de relieve, destacar.
Hochachse= eje vertical.
inwieweit= en qué medida, hasta dónde.
Karo-Muster= cuadriculado.
—————————————————–
O sea, cómo le diría a GREP que todo lo que esta ante del signo igual me lo pase del otro lado?
Alguna idea?
Desde ya muchas gracias.
Lo primero que debes hacer es comprobar que encuentras correctamente lo que estás buscando. Y lo que estás buscando es:
«uno o más caracteres a principio de párrafo, seguidos de un signo igual, seguidos de un espacio en blanco, seguidos de uno o más caracteres, seguidos de un punto, seguidos de un retorno de carro»
Eso en GREP es escribe así:
^(.+?)= (.+?).r
Ahora, quieres cambiar el orden de la secuencia, por lo tanto, en el apartado de «Cambiar a» debes escribir:
$2= $1.
Y ya está.
Estaba leyendo su artículo, Prof. y me queda una duda con este comentario. El punto es un carácter reservado de GREP, así que para encontrar un punto literal dentro de mi búsqueda, tendría que escaparlo primero, no?
En ese caso el patrón de búsqueda cambiaría a: ^(.+?)= (.+?)/.r
Completamente cierto!
Javier, muchísimas gracias.
Funciona perfectamente y me hiciste ahorrar mucho tiempo.
Lo único que le agregué fue un retorno de carro al «Cambiar a» para que me respetara el formato: $2=$1.r
Esta mañana al ver tu respuesta escribí para agradecerte además por la rapidez con que me contestaste pero se ve que no se guardó el comentario.
Otra vez: muchas gracias.
Buenas tardes, a ver si me puedes ayudar:
Tengo que modificar los números de página de un índice pues al remaquetarlo con ID justo a partir de la página 539 y hasta el final tengo que restarle 8, o sea, que la página 539 será la 531, la 540 será la 532… y así hasta el final. ¿Se puede automatizar la tarea con GREP?
Muchas gracias
GREP no permite hacer operaciones aritméticas, así que tendrás que exportar el índice a un programa que sí lo permita y hacer allí la suma del número 8. Como un índice, si está bien hecho, consiste en texto separado por un tabulador, basta exportarlo como texto plano y abrirlo con Excel. Allí puedes hacer la fórmula que necesites e importar nuevamente el texto del índice, aplicarle el formato de párrafo o carácter que necesites, y a correr.
Si no has modificado manualmente en exceso el índice, entonces lo mejor es actualizarlo directamente en InDesign y dejar que el programa coloque el número de página auténtico en cada entrada. Es lo más rápido, eficiente y correcto.
Hola.
¿Tal vez me podrías ayudar? De antemano gracias.
Tengo un listado que esta así:
2735018-A (Inf. Der.)
X
Y quiero cambiar la ubicación así:
X
2735018-A (Inf. Der.)
Nota: Mi primer renglón cambia, en ocaciones son números, palabras, con o sin guión al igual que el paréntesis. La X es siempre constante en mi listado y de preferencia deseo eliminarla. La X tiene un color gris de fondo y esta dentro de un contenedor o cuadro de texto. (Donde quiero poner el primer renglón).
Buscar la primera porción del texto es factible con GREP. Sin embargo, esa X que está en su propio marco de imagen, y que entiendo que es un objeto anclado… Debería ver el documento para buscar alguna pauta que identifique a esa X con fondo gris. Para cambiar el orden de lo encontrado, primero hay que colocar entre paréntesis las partes del texto a buscar. Por ejemplo (primero)(segundo). Si ahora queremos que InDesign cambie el orden, en el cuadro de reemplazar pondremos $2 $1, que significa, primero me colocas el segundo término y después el primero.
Otra cosa, los paréntesis son caracteres reservados en GREP, así que para encontrar algo entre paréntesis debes escaparlos, y lo mismo con el punto: \(Inf\. Der\.\)
Hola, que tal.
Creo que estoy haciendo algo mal, porque no obtengo los resultados esperados. En que correo puedo enviarte el archivo muestra. Disculpa la molestia, soy nueva en este tema. Gracias por tus atenciones.
Hola,
Muy interesante artículo.
Yo estoy intentando poner un punto al final de cada párrafo pero no soy capaz. Me cuesta entender la lógica de los buscadores de ubicación.
Gracias
En el caso del punto, como se trata de un carácter reservado, debes “escaparlo” con una contrabarra: \.
Hola, tu artículo está super útil quisiera saber si me podrían apoyar con una duda; necesito cambiar el espacio por un espacio fino entre cifras de cuatro o más caracteres, por ejemplo las cifras 18 909.
Agradecería mucho la respuesta
Lo más sencillo y práctico es utilizar un estilo de párrafo GREP. Para eso, debes hacer lo siguiente:
\d(?=(\d\d\d)+\D)
De esta forma tendrás un estilo de párrafo que aplicará automáticamente un espacio entre grupos de 3 dígitos.
Buenos días, tengo un documento de mas de 6000 páginas, donde el texto viene de la siguiente manera:
13Y vino uno de los que escaparon, y lo anunció a Abram el hebreo, que habitaba en el encinar de Mamre el amorreo, hermano de Escol y hermano de Aner, los cuales eran aliados de Abram. 14Oyó Abram que su pariente estaba prisionero, y armó a sus criados, los nacidos en su casa, trescientos dieciocho, y los siguió hasta Dan. 15Y cayó sobre ellos de noche, él y sus siervos, y les atacó, y les fue siguiendo hasta Hoba al norte de Damasco. 16Y recobró todos los bienes, y también a Lot su pariente y sus bienes, y a las mujeres y demás gente.
Melquisedec bendice a Abram
17Cuando volvía de la derrota de Quedorlaomer y de los reyes que con él estaban, salió el rey de Sodoma a recibirlo al valle de Save, que es el Valle del Rey. 18Entonces Melquisedec, rey de Salem y sacerdote del Dios Altísimo, sacó pan y vino; 19y le bendijo, diciendo: Bendito sea Abram del Dios Altísimo, creador de los cielos y de la tierra; 20y bendito sea el Dios Altísimo, que entregó tus enemigos en tu mano. Y le dio Abram los diezmos de todo. 21Entonces el rey de Sodoma dijo a Abram: Dame las personas, y toma para ti los bienes. 22Y respondió Abram al rey de Sodoma: He alzado mi mano a Javé Dios Altísimo, creador de los cielos y de la tierra, 23que desde un hilo hasta una correa de calzado, nada tomaré de todo lo que es tuyo, para que no digas: Yo enriquecí a Abram; 24excepto solamente lo que comieron los jóvenes, y la parte de los varones que fueron conmigo, Aner, Escol y Mamre, los cuales tomarán su parte.
hay alguna manera de que donde esta un número seguido de una palabra; ese número me lo ponga en superíndice automaticamente en todo el documento????
Si. Utilizando un estilo GREP. Para ello, defina primero un estilo de carácter que aplique el formato «superíndice» al que llamaremos, «estilo_cifra». Aplicaremos este estilo cada vez que encontremos dos o más dígitos seguidos de uno o más caracteres (letras). Para eso, basta con crear un estilo GREP en el estilo de párrafo principal. En el apartado «Aplicar estilo» seleccione el estilo «estilo_cifra». En el apartado «En texto:», utilice esta cadena de búsqueda:
(\d+)(?=.+?)
. En este caso, estamos usando el operador «lookahead» positivo, es decir, estamos buscando los dos dígitos pero sólo nos interesan si luego le siguen dos caracteres o más.Buenos días, quisiera saber si esto se puede hacer con un script:
que en el documento cada vez que encuentre un número seguido de un retorno de carro,
le coloque antes del número la palabra capítulo.
espero me haya echo enternder.
No es necesario un Script. Basta con utilizar un comando «buscar/cambiar» en modo GREP. Para ello, utilice el siguiente código:
(\d+\r)
Capítulo $1
Gracias por responder.
no se que este haciendo mal, con el primer código efectivamente me busca los números seguidos con un retorno de carro.
pero en «cambiar a», si escribo la palabra capitulo, pero quiero que me deje el numero que encontró.
es decir un ejemplo.
encontro el
7
y que me lo cambie por CAPITULO 7; asi sucesivamente de manera automática.
si es posible??
de ante mano muchas gracias.
Debes colocar este texto en el cuadro «reemplazar por»: CAPÍTULO $1
Buenos días, no se como lograr que por medio de un script, cuando le de buscar números sueltos, me le adicione una palabra; me explico:
el texto viene algo así
4
mksjjfjsfoejofejofjeofjeo
y necesito que cuando haya un numero le coloque la palabra capítulo seguido del número.
osea que debería quedar algo así
CAPÍTULO 4
mksjjfjsfoejofejofjeofjeo
Buenas tardes, tengo un pregunta; como hacer por medio de un código GREP que me busque los espacios en blanco de no separación y los elimine.
(~S +) con este logro que me los ubique, pero no se como decirle que los borre o elimine.
Gracias.
Muy fácil. En el cuadro de búsqueda pon ~S +, y en el de reemplazar lo dejas en blanco. Luego le dices Buscar/Reemplazar todo y listos.
Primero que todo darte las gracias por tan buenos aportes; feliz navidad ,feliz año nuevo y felices reyes.
Espero me puedas orientar con el inconveniente que tengo.
Tengo un texto bastante extenso y necesito que el texto que se encuentre dentro de paréntesis (), que pueden ser letras o números, poderles dar un estilo de párrafo.
al ser tan extenso el texto de mas de 1500 paginas, no se si se pueda hacer de una manera automatizada.
De ante mano muchas gracias
Felices Fiestas! Por suerte, lo que más le gusta a las búsquedas GREP es un patrón repetido, como en su caso un texto dentro de un par de paréntesis. La clave de esta búsqueda está en encontrar (y después sustituir) SÓLO el texto entre paréntesis, sin incluir el propio paréntesis. Además, deberá tener en cuenta que los paréntesis son caracteres reservados de GREP, por lo que es necesario «escaparlos». Para buscar literalmente un paréntesis, deberá usar «
\(
«, siendo la barra invertida «\
» el carácter de escape.Como no quiere incluir los paréntesis como parte del texto encontrado, usaremos un truco que consiste en utilizar modificadores «
lookbehind
» y «lookahead
«, que se podrían traducir por «texto precedido» y «texto seguido de», respectivamente.El modificador «lookbehind positivo» se escribe así:
(?<=)
. Como lo que queremos encontrar es un paréntesis, y hay que escaparlo, la expresión completa será así:(?<=\()
. Observe cómo hemos incluido el paréntesis de apertura\(
justo después del signo igual.Para usar lookahead positivo, usamos la siguiente expresión:
(?=)
. Y como lo que queremos es encontrar el carácter de cierre de paréntesis, deberemos usar la expresión de esta forma:(?=\))
.Para encontrar uno o más caracteres, debe usar la expresión:
.+
, que significa: un carácter seguido de uno o más caracteres. Como GREP es "avaricioso", encontrará TODOS los caracteres entre un paréntesis de apertura y otro de cierre. Por ejemplo, en el siguiente texto:(Texto entre paréntesis) y este no lo está (pero este vuelve a estarlo).
Encontrará exactamente esto:
Texto entre paréntesis) y este no lo está (pero este vuelve a estarlo
. Esto es así porque, efectivamente, hay un paréntesis de apertura y otro de cierre en la cadena devuelta. Para limitar la "avaricia" de GREP, usamos el signo de interrogación, de forma que:.+?
significa "detente en la primera cadena de texto que coincida con la expresión de búsqueda.La cadena de búsqueda completa quedará, pues, de la siguiente manera:
(?<=\().+?(?=\))
Ahora basta escribir
$0
en el cuadro de "Cambiar a", que significa, "vuelve a colocar el texto encontrado", y escoger un estilo de carácter en el cuadro "Cambiar formato"Hola Javier, gracias por este post, muy útil. Necesitaba buscar algo similar pero no daba con algo a mi medida, hasta que llegué a este hilo que me sirvió pero con una variante (y espero haberlo entendido bien, pues hice prueba error hasta que me arrojó lo que necesitaba).
Buscaba específicamente esto:
Busca: un salto de página y un conjunto de caracteres, (lookbehind) precedido de un salto de página, y (lookahead) seguido de otro salto de página; y devuélveme: el conjunto de caracteres, precedido de solo un salto de página y seguido de otro salto de página; o, en otras palabras: Devuélveme solo lo que miras hacia adelante y a esto le aplicas un estilo de párrafo.
Tu código me ha dado la clave, pero no entiendo bien, pues para que funcione bien lo mío le tuve que agregar paréntesis extras:
Buscar: ((?<=\r))((\r))((.+?))((?=\r))
Cambiar a: $4
Si le quito los paréntesis extras, dejando todo el resto igual, me reemplaza la línea de caracteres buscada, por $4.
Lo que no entiendo es por qué debo agregar estos paréntesis para que funcione.
Un saludo!
El «problema» es que las búsquedas del tipo lookahead y lookbehind NECESITAN un paréntesis, así que tú debes proporcionar otro par para que la expresión delimite patrones de búsqueda.
Perfecto, muchas gracias!
Hola, me pareció muy útil el artículo.
Sigo teniendo una duda para ordenar alfabéticamente una lista. Dicha lista es parecida a lo siguiente:
ZNOV ZDEF ZAUE ZNNO etc., sin comas.
Con GREP puedo separar en párrafos este texto, pero mi duda es si hay alguna forma de que también en GREP pueda ordenarlo alfabéticamente. Sé que puedo hacerlo con Script, pero son muchos documentos en los que debo ordenar el texto, aproximadamente 50 por semana, así que sería muy útil ahorrarme el paso de estar seleccionando cada texto y aplicar el Script. Espero haberme explicado con claridad y gracias de antemano.
En estos casos, GREP no suele ser la mejor solución. Nosotros utilizamos el magnífico BBEdit para tales menesteres.
Muy buen aporte Javier! Yo vengo motivado por la nota de la pág 193 de tu libro «InDesign CC» (Anaya). Te quería preguntar si no existirá algo así como un diccionario GREP y un libro en para hacer ejecicios con GREP. ¿Cuál recomendarías tú? ¿O has hecho uno tú? Gracias. Saludos.
Llevo años utilizando todas las ediciones (ya van por la tercera) del libro «GREP in InDesign«, de Peter Kahrel. No tiene desperdicio.
Hola Javier, gracias por compartir, son de mucha utilidad tus respuestas y artículos. Tengo la siguiente situación: En un párrafo me aparece la misma palabra al final de línea en tres lineas seguidas dentro de un párrafo. Esto se ve muy anti estético, de qué manera lo podría resolver con GREP y automatizarlo para que detecte y resuelva casos similares en todo el documento. Gracias, espero haberme explicado. Saludos
Yo no utilizaría GREP, sino las Opciones de separación de párrafos del propio InDesign, y las opciones de mantener líneas juntas.
Buenos días, tengo un texto extenso, más específicamente la biblia, la cual esta compuesta por varios versículos y capítulos.
Necesito colocar en el encabezado el nombre del versículo actual y el número de los capítulos que se encuentren en esa página, ejemplo: GÉNESIS 4,5,6
La verdad tengo pocos conocimientos con indesing y no he logrado hacerlo, ya que logro colocar por medio de sección el nombre del versículo correspondiente, pero no logro que automáticamente me identifique que capítulos están en la pagina, no se si hay una manera con GREP, que me ayude con este tema. estaria muy agradecido si me pudieras ayudar, muchas Gracias.
Hola. Estoy intentando hacer una busqueda de una letra al principio de linea dentro de un párrafo. Concretamente la doble R (rr). No quiero que aparezca a principio de linea cuando parte una palabra. Y por más que he buscado como hacerlo, me ha sido imposible. Se nota que soy nuevo haciendo busquedas con GREP, porque se me está haciendo un mundo.
Agradecería vuestra ayuda. Mil gracias.
InDesign no puede encontrar el carácter especial utilizado para separar palabras, ni tan sólo con GREP. Así que debes editar el diccionario del usuario (Editar > Ortografía > Diccionario del usuario), añadir la palabra en cuestión, e indicar, mediante el carácter de la tilde, por dónde debe separarla. Por ejemplo, la palabra «guerrero» se separará de esta forma «gue~~rre~~ro». Si no quieres que la «rr» aparezca a principio de línea, cámbiala por «guerre~~ro». Hazlo con el resto de palabras «infractoras» (no serán muchas)
Gracias por la rapidez en responder F. Javier. Pensaba que con GREP podría solucionarlo más rapido. Tomo nota de tu sugerencias. Gracias de nuevo. 😉
Hola Profe!!!!. consulta, tengo un diccionario por terminar, tengo el estilo de texto para las palabras principales que irán en orden de la A a la Z, pero necesito aplicar el estilo de texto a la palabra inicial hasta los dos puntos, ejemplo:
Accidente: toda lesión….
Buenas de nuevo. Para poder hacer lo que necesitas, tienes que seguir estos pasos:
Usa esta definición de estilo:
^.+(?<=:)
Los comodines usados son los siguientes:
^
: Iniciar la búsqueda a principio de párrafo.+
: Coincidir uno o más caracteres(?<=:)
: Operador "lookbehind" positivo. Significa que los caracteres deben tener a continuación dos puntos (:)Si no quieres que los dos puntos tengan el mismo estilo que el término, deberás añadir otro estilo GREP justo debajo que "apunte" directamente a los dos puntos (:) y les aplique el estilo de carácter que necesites.
Buenos días, me gustaría saber si en una palabra en cursiva seguida de un signo de puntuación en redonda poder cambiarlo a cursiva, no encuentro la manera. Muchas gracias anticipadas
Por desgracia, eso supone buscar un conjunto de caracteres a los que se ha aplicado determinado estilo de carácter. Las búsquedas GREP no permite especificar un subconjunto de caracteres con un estilo aplicado, es decir, sólo permiten encontrarlo cuanto TODOS los caracteres tienen aplicado en estilo. Por lo tanto, la búsqueda GREP no será de ayuda.
Yo tengo el mismo problema. Lo único que se me ha ocurrido es un poco lioso y hay que tener cuidado, pero merece la pena.
Buscas los textos en itálica y a todos le añades una «,».
Buscas: ,, ,; ,? ,! ,- ,. y a todos le das estilo italic.
Luego buscas con el estilo italic palabras seguidas de coma y le quitas la coma.
Como lo mío es un libro en negro, lo he probado cambiando las itálicas a color rojo para poder ir comprobándolo.
Espero que te sirva. Si has encontrado una solución mejor, ruego la compartas.
Un saludo, David
Buenos días Javier, espero me puedas ayudar. Quizás es muy básico lo que te pregunto pero no sé como puedo decirle a indesign que no aplique la partición de palabras entre dos vocales.
Muchas gracia por tu tiempo
La verdad es que resulta realmente difícil que InDesign haga una partición de palabras entre dos vocales, al menos en español es muy raro. No obstante, si detectas alguna palabra que separa de forma incorrecta (ahora no se me ocurre ningún ejemplo), puedes incluirla en el diccionario del usuario e indicar, mediante tildes (~) por dónde debe partir correctamente la palabra. A mayor número de tildes, mayor precedencia. Puedes incluso colocar la tilde delante de la palabra para evitar que la pueda partir.
Por ejemplo, la palabra «contraespionaje» se puede separar como contra-espionaje. Si quieres evitar separar las dos vocales, añade esta entrada en el diccionario del usuario: con~~traes~~pio~~na~~je
En esta página Web tienes las normas de separación de sílabas con guiones a final de frase, que son las que utiliza InDesign, y verás que es muy raro encontrar un caso de separación entre vocales, puesto que suelen formar parte de la misma sílaba: https://www.estandarte.com/noticias/idioma-espanol/cmo-separar-palabras-al-final-de-rengln_3941.html
Buenas. Quiero encontrar repeticiones al final de las líneas. Por ejemplo, 3 líneas consecutivas que teminan con «e». ¿Es posible con el método GREP?
¡Gracias! Ojalá todavía estés revisando estos comentarios
Buenas. Necesito buscar signos o caracteres repetidos al final de líneas. Ej: 3 líneas consecutivas que terminen con signos de puntuación. ¿Es posible con el método GREP?
Mil gracias por la atención y el tiempo
Buenas, Alejandro. El «problema» es que GREP busca patrones. Una línea no es un patrón a nos ser que haya algún carácter que la identifique como tal. Por ejemplo, un carácter de salto de línea forzado. Recuerda que una línea puede ocupar distintos anchos dependiendo del ancho del marco de texto. Y ahí GREP no puede llegar. Lo que sí puede encontrar es patrones de 3 párrafos (o tres saltos de línea) acabados en una letra o carácter concretos.
Hola, tu artículo me ha servido muchísimo para darle sentido a muchas expresiones que he visto ya he hechas. Sin embargo tengo una duda, me encontré esta expresión \d{2}(\d{2})-(\d\d)-(\d\d) que se refiere a una construcción de una fecha, por ejemplo 2022-03-21 y posteriormente se utiliza en cambiar la siguiente expresión: $3/$2/$1; entiendo que se refiere al cambio de la ubicación y reemplazo del guión por la barra, pero al aplicarla, además retira los primeros dígitos de la fecha quedando de la siguiente forma: 21/03/22.
Esa parte no termina de quedarme claro ¿Podrías explicarme como funciona?
Efectivamente, lo que ves como búsqueda son tres capturas. Cada uno de los textos delimitados por paréntesis es una captura. Por lo tanto, lo que estamos haciendo es buscar dos números \d{2} seguidos de, esta vez en modo captura, otros dos números (\d{2}). Ésta es la primera captura, a la que nos referimos en el cuadro de «cambiar por» como $1. Si te fijas, son los dos últimos dígitos del año, que en el cuadro de cambiar por se colocan justo al final. El resto de capturas hacen lo propio con el mes y con el día de la semana. Una vez tenemos las tres capturas, cambiamos su orden. Esta búsqueda nos permite convertir fechas en inglés a fechas en sistema español.
Estimado Javier muy buenos sus recomendaciones, lo felicito por compartir su conocimiento.
Tengo una consulta como puedo buscar títulos o subtítulos mediante búsquedas GREEP sin que seleccione los párrafos completos, le adjunto un ejemplo:
Las reglas del fútbol
Número de jugadores
El deporte se practica entre dos equipos con 11 jugadores de campo cada uno, donde uno debe ser portero. En competencia oficial, cada escuadra tiene derecho a tres cambios en tiempo regular.
Equipo de los jugadores
Todos los jugadores de campo y porteros portarán: una camiseta de su respectivo club, con su nombre y número como indicadores, un pantalón corto o short, medias largas, espinilleras y tenis especializados para jugar. En caso de los guardametas, mantendrán el mismo patrón, con la diferencia de que ellos usarán guantes y colores que sean distintos a los jugadores de campo convencionales, tanto locales como visitantes.
Jueces de línea
Los línea o abanderados, serán el último punto de referencia para el árbitro central. Ellos apoyarán las jugadas que se susciten por las bandas, decretán saques de mano, indicarán faltas o cambios y además, son los primeros en comunicar un fuera de lugar.
Muy amable por su ayuda.
Fabricio, por desgracia no me queda claro qué es lo que estás buscando. En todo caso, si lo que entiendo es que necesitas seleccionar los estilos de párrafo título y subtítulo, no es necesaria una búsqueda GREP: basta con utilizar las opciones de buscar y reemplazar formato del cuadro de diálogo Buscar/Cambiar.
Muy amable por su pronta respuesta
Le explico que es lo busco, por ejemplo este subtitulo – Equipo de los jugadores – lo quiero detectar mediante búsquedas, pero así como ese ejemplo existe mucho otros con diferentes términos, me gustaría saber si existe una consulta que solo me puedan detectar ciertas líneas para ahí poder aplicar un estilo y si continua haciendo las búsqueda me detecte – Jueces de linea y así sucesivamente
Equipo de los jugadores
Todos los jugadores de campo y porteros portarán: una camiseta de su respectivo club, con su nombre y número como indicadores, un pantalón corto o short, medias largas, espinilleras y tenis especializados para jugar. En caso de los guardametas, mantendrán el mismo patrón, con la diferencia de que ellos usarán guantes y colores que sean distintos a los jugadores de campo convencionales, tanto locales como visitantes.
Jueces de línea
Los línea o abanderados, serán el último punto de referencia para el árbitro central. Ellos apoyarán las jugadas que se susciten por las bandas, decretán saques de mano, indicarán faltas o cambios y además, son los primeros en comunicar un fuera de lugar.
Muy amable,
En el caso que comentas, lo más sencillo es utilizar una búsqueda EXACTA de varios términos:
Buscar: [Equipo de los jugadores|Jueces de línea]
Cambiar a: $0
Cambiar formato: [estilo de párrafo]
Con GREP ¿Puedo buscar el primer párrafo de cada celda de una tabla?
El caso es: tengo una tabla muy grande y en cada celda (solo hay una columna) hay una serie de datos listados y al primer párrafo de ese listado de datos le quiero aplicar un estilo. Hasta ahora lo he hecho a mano, pero si hubiese forma de automatizar sería perfecto.
Gracias
Pues todo depende de cómo es el contenido de cada celda.
Si el primer párrafo sólo ocupa una línea, más que un estilo GREP yo usaría un estilo de línea: Opciones de estilo de párrafo > Capitulares y estilos anidados > Estilos de línea anidados.
También puedes usar un estilo anidado hasta el signo FIN DE PÁRRAFO (pero entonces no funcionaría si tienes más de 2 párrafos o en celdas que no tengan más que una línea)
Todos estos estilos necesitan un estilo de carácter, que es lo que se aplicará al patrón que encuentren.
Si la solución de arriba no te sirve, también puedes aplicar este estilo GREP con el siguiente patrón de búsqueda: ^.+\r
OJO, esta solución busca TODOS los caracteres empezando por el principio de párrafo hasta alcanzar el primer retorno de carro (\r)
Muchas gracias por tu solución. Voy a probar las diferentes opciones
Hola Javier, muy buen día, muchas gracias por compartir tus conocimientos…
Tengo una pregunta, resulta que en una publicación me piden quitar todos los acentos que vengan en altas, l he podido hacer vocal por vocal, mi pregunta es si se puede hacer mediante una expresión GREP, y declarar todas las vocales de una sola vez, por lo que comentas, he podido encontrar todas las vocales con este código: [ÁÉÍÓÚ], pero no encuentro la manera de sustituílas por las vocales que le correspondería: A, E, I, O y U, habrá una forma de sustituirlas a todas de una vez por las vocales respectivas…
De antemano, muchas gracias por todo, saludos
Hola Javier, muy buen día, muchas gracias por compartir tus conocimientos…
Tengo una pregunta, resulta que en una publicación me piden quitar todos los acentos que vengan en altas, l he podido hacer vocal por vocal, mi pregunta es si se puede hacer mediante una expresión GREP, y declarar todas las vocales de una sola vez, por lo que comentas, he podido encontrar todas las vocales con este código: [ÁÉÍÓÚ], pero no encuentro la manera de sustituílas por las vocales que le correspondería: A, E, I, O y U, habrá una forma de sustituirlas a todas de una vez por las vocales respectivas…
De antemano, muchas gracias por todo, saludos
Juan Carlos Hurtado
No existe una forma directa de cambiar una vocal acentuada por su equivalente sin acentuar usando GREP. Sin embargo, hay un maravilloso Script instalado por defecto en InDesign, en el panel Scripts, en la ruta
Aplicación > Samples > JavaScript > FindChangeByList.jsx
. Este script ejecuta una lista de Buscar/Cambiar usando búsquedas regulares o GREP. En tu caso, bastará con búsquedas regulares. Simplemente edita el documentoFindChangeList.txt
para que contenga la lista de las cinco búsquedas, en la que especificarás simplemente cambiarÁ
porA
,É
porE
y así sucesivamente para las cinco vocales. Aquí el ejemplo de la línea que debes usar para cambiar la A acentuada:text {findWhat:"Á"} {changeTo:"A"} {includeFootnotes:true, includeMasterPages:false, includeHiddenLayers:false, wholeWord:false} Cambiar la A acentuada por A sin acento.
IMPORTANTE: el script NO RECONOCERÁ las mayúsculas acentuadas a no ser que cambies la codificación del archivo de texto a UTF-16 (por defecto está en UTF-8). Para ello, utiliza TextEdit en un Mac (o BBEdit o cualquier otro editor) o Notepad++ en Windows.
Pregunta avanzada:
Tengo una serie de listados de un catálogo (muchos listados). En esos textos de los listados aparecen nombre de marcas que deben ir en negrita.
Ejemplo: «Adidas». Y «Adidas» aparece acompañado de diversos textos en diversos listados. Para ponerlo en negrita hago una búsqueda normal en la que sustituyo «Adidas» por «Adidas»+Estilo de texto «Bold».
¿Hay alguna forma de buscar y reemplazar masivamente? Es decir, coger una lista de términos (En el ejemplo: «Adidas», «Puma», «Nike», «Converse»…) y poder cambiar el estilo para esas palabras.
En vez de hacer una búsqueda de un término, hace búsqueda de muchos términos a la vez para el mismo cambio, en este caso un estilo de texto.
Gracias
Hola:
Necesito hacer un comando Grep para sustituir la entrada de principio de párrafo de número cualquiera seguido por un punto y luego un espacio y el texto a continuación; por un número, punto y después un tabulador y texto a continuación. Es sustituir ese espacio después del punto. por el tabulador:
Ejemplo:
239. Texto…
por
239. Texto…
Gracias
Tambien estoy buscando un comando GREP para que los números romanos pases de mayúsculas a versalitas. A veces esos números romanos van a continuación de los textos «siglos»; «siglo» o «s.».
Gracias
Estoy buscando un comando grep de sustitución para un estilo de párrafo donde el texto empieza con un número, seguido de un punto, luego un espacio y a continuación texto; para cambiar por número, seguido de un punto, luego un tabulador y a continuación texto. Seria cambiar ese espacio por el tabulador:
Ejemplo:
239. Texto…
por
239. Texto…
Gracias
Hola Alexis. Los estilos GREP no permiten añadir ni eliminar caracteres en las cadenas de búsqueda. Para poder eliminar espacios y sustituirlos por tabuladores debes hacer una búsqueda GREP. Luego, con el nuevo patrón, podrás aplicar un estilo GREP. Para buscar un número a principio de párrafo seguido por un punto, un espacio en blanco y un texto, haz esta búsqueda:
(^\d+\.)( )(.+)?
Y en cambiar por:
$1\t$3
Hola
Muchísimas gracias por la página, es una maravilla.
Intento hacer una busqueda con Grep pero no soy capaz de hacerlo.
Para el idioma Euskera, necesito localizar la combinación de letras tz, tx y ts de tal forma que cuando las encuentre, las mantenga juntas, es decir no pueden quedar la t en una línea de párrafo y las otras letras en la siguiente línea.
Muchas gracias
Bueno, te explicamos cómo hacer el primero y tú te encargas del resto.
Tienes que usar una búsqueda GREP del tipo «look behind positivo» y «look ahead positivo», y un estilo de carácter, pongamos que «no_separar», en el que especificarás un tamaño de fuente de 1 punto o menos.
La estrategia consiste en buscar justamente el «hueco» precedido por una letra y seguido por la siguiente, y en su lugar colocar un carácter de no separación con un estilo de carácter que haga que dicho carácter tenga un tamaño de texto tan pequeño que pase desapercibido.
Para el par tz, esta es la búsqueda:
(?<=t)(?=z)
En cambiar por:
~s
Y en el apartado "Cambiar formato", aplica el estilo de carácter que hemos definido al principio, "no_separar".
Te amo…. jajajaja. muchísimas gracias, que cantidad de trabajo nos vas a ahorrar. Funciona de maravilla.
Genial, genial, genial!!!!!
Hola! muchas gracias por tu ayuda.
Deseo poner mayuscula solo en la primera letra de la segunda linea. Aclaro que no es un salto de linea forzado, es un salto normal por el cierre de la caja de parrafo indesign
«Dove
mascara capilar x300gr. variedades seleccionadas.»
Queda asi:
«Dove
Mascara capilar x300gr. variedades seleccionadas.»
En este caso, debes usar estilos anidados (Capitulares y Estilos anidados) y definir un estilo por cada línea si son el mismo párrafo (salto de línea forzado). En el caso que comentas, si hay un salto de párrafo, hay que conocer el patrón que sigue el resto de texto, porque con GREP, buscar el primer carácter de una línea después de un salto de párrafo es muy poco especifico (a no ser, claro, que en un marco de texto sólo haya un salto de párrafo)