Introducción a las búsquedas GREP con InDesign

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.

Figura 1. Opciones GREP del cuadro de diálogo Buscar/Cambiar
Figura 1. Opciones GREP del cuadro de diálogo Buscar/Cambiar

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 con sigo 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 metacarácter, la contrabarra (). Y como es posible que alguna vez desees buscar a la propia contrabarra, bastará con introducir dos veces seguidas este metacarácter.

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

77 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.

    Responder
    • F. Javier Gómez Laínez
      18th junio 2009 11:53 pm

      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!

      Responder
      • Alejandro Santacroce
        1st noviembre 2015 11:38 am

        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.

        Responder
  • y el II para cuando, excelente introducción a estilos GREP, espero en realidad el aporte II, saludos desde México

    Responder
  • 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.

    Responder
    • 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.

      Responder
  • 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!!

    Responder
    • 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»

      Responder
      • 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

        Responder
  • 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.

    Responder
    • 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?

      Responder
  • 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.

    Responder
    • 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á.

      Responder
  • 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.

    Responder
  • 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

    Responder
    • F. Javier Gómez Laínez
      13th octubre 2016 9:37 am

      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.

      Responder
  • 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).

    Responder
    • F. Javier Gómez Laínez
      4th noviembre 2016 8:30 am

      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\.\)

      Responder
  • 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.

    Responder
  • 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

    Responder
    • F. Javier Gómez Laínez
      26th agosto 2018 11:39 am

      En el caso del punto, como se trata de un carácter reservado, debes “escaparlo” con una contrabarra: \.

      Responder
  • Raul Poloniecki
    14th octubre 2018 4:12 am

    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

    Responder
    • F. Javier Gómez Laínez
      14th octubre 2018 9:57 am

      Lo más sencillo y práctico es utilizar un estilo de párrafo GREP. Para eso, debes hacer lo siguiente:

      1. en el apartado «Estilo», define un estilo de carácter que aplique un tracking de 200 o más
      2. en el apartado «En texto», escribe 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.

      Responder
  • 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????

    Responder
    • F. Javier Gómez Laínez
      26th noviembre 2018 3:05 pm

      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.

      Responder
  • 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.

    Responder
    • F. Javier Gómez Laínez
      26th noviembre 2018 3:08 pm

      No es necesario un Script. Basta con utilizar un comando «buscar/cambiar» en modo GREP. Para ello, utilice el siguiente código:

      1. En el cuadro «Buscar«, introducir el texto: (\d+\r)
      2. En el cuadro «Cambiar a«, escribir Capítulo $1
      Responder
      • Fabián Andrés
        5th diciembre 2018 1:39 pm

        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.

        Responder
  • 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

    Responder
  • 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.

    Responder
    • F. Javier Gómez Laínez
      21st diciembre 2018 5:03 pm

      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.

      Responder
  • 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

    Responder
    • F. Javier Gómez Laínez
      28th diciembre 2018 5:22 pm

      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"

      Responder
      • 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!

        Responder
        • F. Javier Gómez Laínez
          12th mayo 2020 4:37 pm

          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.

          Responder
  • 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.

    Responder
  • Adolfo Alarcon Campos
    19th febrero 2019 2:03 am

    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.

    Responder
  • 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

    Responder
    • F. Javier Gómez Laínez
      25th abril 2019 3:10 pm

      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.

      Responder
  • 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.

    Responder
  • 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.

    Responder
    • F. Javier Gómez Laínez
      1st octubre 2019 4:51 pm

      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)

      Responder
  • 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. 😉

    Responder
  • 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….

    Responder
    • F. Javier Gómez Laínez
      20th agosto 2020 9:20 am

      Buenas de nuevo. Para poder hacer lo que necesitas, tienes que seguir estos pasos:

      1. Crear un estilo de párrafo para las entradas del índice
      2. Crear un estilo de carácter para los términos definidos (la palabra antes de los dos puntos)
      3. Editar el estilo de párrafo definido en el primer punto con un estilo GREP que aplique el estilo definido en el segundo punto a los caracteres de inicio de párrafo hasta los dos puntos (sin incluir)

      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.

      Responder
  • 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

    Responder
    • F. Javier Gómez Laínez
      31st enero 2021 5:21 pm

      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.

      Responder
    • 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

      Responder
  • 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

    Responder
    • F. Javier Gómez Laínez
      23rd marzo 2021 6:49 pm

      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

      Responder
  • Alejandro Arango
    22nd febrero 2022 4:28 am

    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

    Responder
  • Alejandro Arango
    22nd febrero 2022 6:12 pm

    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

    Responder
    • F. Javier Gómez Laínez
      23rd febrero 2022 10:29 am

      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.

      Responder
  • Silvia Pérez
    2nd marzo 2022 3:22 am

    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?

    Responder
    • F. Javier Gómez Laínez
      9th marzo 2022 11:20 am

      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.

      Responder
  • 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.

    Responder
    • F. Javier Gómez Laínez
      10th marzo 2022 10:01 am

      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.

      Responder
      • 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,

        Responder
        • F. Javier Gómez Laínez
          11th marzo 2022 9:24 am

          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]

          Responder
  • 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

    Responder
    • F. Javier Gómez Laínez
      26th mayo 2022 5:58 pm

      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)

      Responder
  • Juan Carlos Hurtado Moreno
    12th septiembre 2022 3:44 am

    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

    Responder
  • Juan Carlos Hurtado Moreno
    12th septiembre 2022 3:46 am

    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

    Responder
    • F. Javier Gómez Laínez
      12th septiembre 2022 10:04 am

      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 documento FindChangeList.txt para que contenga la lista de las cinco búsquedas, en la que especificarás simplemente cambiar Á por A, É por E 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.

      Responder
  • 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

    Responder
  • Alexis Manuel Rodriguez Diezcabezas de Armada
    10th octubre 2023 10:53 pm

    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

    Responder
  • Alexis Manuel Rodriguez Diezcabezas de Armada
    10th octubre 2023 10:56 pm

    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

    Responder
  • Alexis Manuel Rodriguez Diezcabezas de Armada
    10th octubre 2023 11:29 pm

    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

    Responder
    • F. Javier Gómez Laínez
      11th octubre 2023 9:25 am

      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

      Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Por favor, introduce una dirección de correo electrónico válida.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.