Una de las funciones de InDesign más potentes que nos ahorran tiempo y trabajo son las búsquedas GREP. Junto con los scripts uno de los pilares de la automatización en el mejor software de diseño editorial.
Vamos a empezar por un ejemplo concreto de su utilidad para después dejaros multitud de recursos para sacar todo el partido a las búsquedas GREP en InDesign.
Ejemplo de uso GREP
En el foro, HPratt consulta cómo puede desde una sola consulta GREP cambiar en un documento los siglos a versalitas.
Dejamos aquí una posible solución que explicamos para que la podáis personalizar:
Pongamos estas 3 posibilidades:
- Siglo xv
- siglos xv y xvi
- siglo. xv
((((?i)siglo)s?[:.]?)|(y))((\sxvi)|(\sv))
Esta búsqueda nos encontrará las 3 cadenas anteriores.
- (?i) desactiva las mayúsculas para que encuentre tanto siglo como Siglo
- s? deja como opcional la aparición de la s, encuentra tanto siglo como siglos
- [:.]? opcionalmente puede encontrar diversos caracteres que indiquemos
- |(y) con esto hacemos que los números también puedan estar precedidos de «y»
- El gran segundo grupo nos servirá para poner todos los siglos. Los ponemos en subgrupos y entre ellos | para que encuentre uno u otro siglo. Cada subgrupo comenzará por el comodín de cualquier espacio en blanco \s
Es sólo una aproximación, si hubiera una cadena del tipo: «siglo:xvi» no la encontraría porque hemos indicado que cada siglo comience con un espacio en blanco. Podríamos añadirlo como opcional poniendo \s?.
Actualización
HPratt sólo quiere cambiar los números romanos y con la expresión anterior se cambiaría todo «siglos» y también «y».
Lo que podemos hacer es utilizar un condicionante para que sólo encuentre los números romanos pero siempre y cuando estén precedidos por «(S,s)iglo(s)» o «y»
(((?<=[Ss]iglo)s?[:.]?)|(?<=y))((\s?xvi)|(\sv))
La clave está en ?<=, el operador lookbehind positivo, lo ponemos delante de siglos e y. Hemos cambiado el desactivado de las mayúsculas por [Ss] al ir entre corchetes le damos a ID la opción de que iglos empiece por S o s.
Las expresiones GREP son un submundo dentro de InDesign, os dejos algunos enlaces de utilidad
Ejemplos útiles
En perasalvino encuentro este artículo que recoge hasta 16 expresiones para encontrar:
- La primera letra en cada ítem de listas de viñetas: (.)(\t)(\l)
- Palabras entre corchetes: \[\w{4,20}\]
- TODO MAYíšSCULAS: \<[\u]{2,}\>
- Texto entrecomillado («»): («)(\u*\l* *.*\w*\d*)(«)
- Texto entre paréntesis: (\()(\u*\l* *.*\w*\d*)(\))
- E-mail: [\l\u\d_%-]+@[\l\u\d_%-]+
- Fechas con formato dd/mm/aa o dd/mm/aaa: \d\d?-\d\d?-(\d\d)?\d\d
- Varios términos: \b(termino 1|termino 2|termino 3|termino 4)
Metacaracteres
De la ayuda de Adobe y en español sacamos expresiones con ejemplos del resultado
Expresión | Cadena de búsqueda | Texto de ejemplo | Coincidencias (en negrita) |
Tipos de caracteres | [abc] o [abc] | Maria cuenta bien. | Maria cuentabien. |
[ ] | Busca la letra a, b o c. | ||
Inicio de párrafo | ^~_.+ | «Vimos»”o, al menos, eso creemos»”una vaca morada.» | «Vimos»”o, al menos, eso creemos»”una vaca morada.» |
^ | Este signo busca el inicio de párrafo (^) por un guión largo (~_) seguido de cualquier carácter ( . ) una o varias veces (+). | «”Konrad Yoes | «”Konrad Yoes |
Operador ‘lookahead’ negativo | InDesign (?!CS.*?) | InDesign, InDesign 2.0, InDesign CS e InDesign CS2 | InDesign, InDesign 2.0, InDesign CS e InDesign CS2 |
(?!patrón) | El operador ‘lookahead’ negativo hace coincidir la cadena de búsqueda, sólo si no va seguido del patrón específico. | ||
Operador ‘lookahead’ positivo | InDesign (?=CS.*?) | InDesign, InDesign 2.0, InDesign CS, e InDesign CS2 | InDesign, InDesign 2.0, InDesignCS y InDesign CS2 |
(?=patrón) | El operador ‘lookahead’ positivo hace coincidir la cadena de búsqueda, sólo si no va seguido del patrón específico. | ||
Utilice patrones similares en operadores ‘lookbehind’ negativos(?<!patrón) y positivos (?<=patrón). | |||
Grupos | (rápido) (zorro) (marrón) | El rápido zorro marrón subió y bajó de un salto. | El rápido zorro marrón subió y bajó de un salto. |
( ) | Todo el texto encontrado = rápido zorro marrón; Texto encontrado 1= rápido; Texto encontrado 2 = zorro; Texto encontrado 3= marrón | ||
Paréntesis sin marcado | (rápido) ($:zorro) (marrón) | El rápido zorro marrón subió y bajó de un salto. | El rápido zorro marrón subió y bajó de un salto. |
(?:expresión) | Todo el texto encontrado = rápido zorro marrón; Texto encontrado 1= rápido; Texto encontrado 2 = zorro | ||
Mayús./minús. activado | (?i)manzana | Manzana manzana MANZANA | ManzanamanzanaMANZANA |
(?i) | También puede utilizar (?i:manzana) | ||
Mayús./minús. desactivado | (?-i)manzana | Manzana manzana MANZANA | Manzana manzana MANZANA |
(?-i) | |||
Multilínea activado | (?m)^\w+ | Uno Dos Tres Cuatro Cinco Seis Siete | Uno Dos Tres Cuatro Cinco SeisSiete Ocho |
(?m) | En este ejemplo, la expresión busca una o más (+) palabras (\w) al principio de una línea (^). La expresión (?m) permite que todas las líneas del texto encontrado se traten como líneas separadas. | ||
Multilínea desactivado | (?-m)^\w+ | Uno Dos Tres Cuatro Cinco Seis Siete | Uno Dos Tres Cuatro Cinco Seis Siete |
(?-m) | |||
Línea por línea activado | (?s)c.a | abc abc abc abc | abc abcabc abc |
(?s) | Las búsquedas para cualquier carácter ( . ) entre las letras c y a. La expresión (?s) hace coincidir cualquier carácter, incluso si recae en la siguiente línea. | ||
Línea por línea desactivado | (?-s)c.a | abc abc abc abc | abc abc abc abc |
Ignorar espacio en blanco activado | (?s)\w \w\w | El rápido zorro marrón | Elrápido zorro marrón |
(?x) | Este busca una palabra (\w), seguida por un espacio, seguida por dos o más palabras (\w\w). La expresión (?s) normalmente ignora todos los espacios en blanco, lo que quiere decir que busca tres caracteres en una fila (\w\w\w). | ||
Ignorar espacio en blanco desactivado | (?-s)\w \w\w | El rápido zorro marrón | El rápido zorro marrón |
(?-x) | |||
Repetir el número de veces | b{3} coincide 3 veces exactamente | abbc abbbc abbbbc abbbbbc | abbc abbbc abbbbc abbbbbc |
{ } | b(3,} coincide al menos 3 veces | abbc abbbc abbbbc abbbbbc | |
b{3,}? coincide al menos 3 veces (coincidencia más corta) | abbc abbbc abbbbc abbbbbc | ||
b{2,3} coincide al menos 2 veces y no más de 3 veces | abbc abbbc abbbbc abbbbbc | ||
b{2,3}? coincide al menos 2 veces y no más de 3 (coincidencia más corta) | abbc abbbc abbbbc abbbbbc |
Y un buen listado de los metacaracteres tanto para texto como para GREP
Carácter: | Metacarácter de la ficha texto: | Metacarácter de la ficha GREP: |
Carácter de tabulación | ^t | \t |
Fin de párrafo | ^p | \r |
Salto de línea forzado | ^n | \n |
Cualquier número de página | ^# | ~# |
Número de página actual | ^N | ~N |
Número de página siguiente | ^X | ~X |
Número de página anterior | ^V | ~V |
* Cualquier variable | ^v | ~v |
Marcador de sección | ^x | ~x |
* Marcador de objeto anclado | ^a | ~a |
* Marcador de referencia de nota al pie de página | ^F | ~F |
* Marcador de índice | ^I | ~I |
Símbolo de viñeta | ^8 | ~8 |
Carácter de intercalación | ^^ | \^ |
Barra inclinada inversa | \ | \\ |
Signo de copyright | ^2 | ~2 |
Puntos suspensivos | ^e | ~e |
Virgulilla | ~ | \~ |
Símbolo de párrafo | ^7 | ~7 |
Símbolo de marca registrada | ^r | ~r |
Símbolo de sección | ^6 | ~6 |
Símbolo de marca comercial | ^d | ~d |
Abrir paréntesis | ( | \( |
Cerrar paréntesis | ) | \) |
Abrir llave | { | \{ |
Cerrar llave | } | \} |
Abrir corchete | [ | \[ |
Cerrar corchete | ] | \] |
Guión largo | ^_ | ~_ |
Guión corto | ^= | ~= |
Guión opcional | ^- | ~- |
Guión de no separación | ^~ | ~~ |
Espacio largo | ^m | ~m |
Espacio corto | ^> | ~> |
Tercio de espacio | ^3 | ~3 |
Cuarto de espacio | ^4 | ~4 |
Sexto de espacio | ^% | ~% |
Espacio de alineación | ^f | ~f |
Espacio ultrafino | ^| | ~| |
Espacio de no separación | ^s | ~s |
Espacio de no separación (ancho fijo) | ^S | ~S |
Espacio fino | ^< | ~< |
Espacio para cifra | ^/ | ~/ |
Espacio de puntuación | ^. | ~. |
Contenido del Portapapeles, con formato | ^c | ~c |
Contenido del Portapapeles, sin formato | ^C | ~C |
Cualquier comilla doble | « | « |
Cualquier comilla sencilla | ‘ | ‘ |
Comilla doble recta | ^» | ~» |
Comillas de apertura | ^{ | ~{ |
Comillas de cierre | ^} | ~} |
Comilla recta | ^’ | ~’ |
Comilla de apertura | ^[ | ~[ |
Comilla de cierre | ^] | ~] |
Retorno de carro estándar | ^b | ~b |
Salto de columna | ^M | ~M |
Salto de marco | ^R | ~R |
Salto de página | ^P | ~P |
Salto de página impar | ^L | ~L |
Salto de página par | ^E | ~E |
Salto de línea opcional | ^j | ~a |
Tabulación de sangría derecha | ^y | ~y |
Sangría hasta aquí | ^i | ~i |
Finalizar estilo anidado aquí | ^h | ~h |
Separador | ^k | ~k |
Encabezado (estilo de párrafo) | ^Y | ~Y |
Encabezado (estilo de carácter) | ^Z | ~Z |
Texto personalizado | ^u | ~u |
Número de la última página | ^T | ~T |
Número de capítulo | ^H | ~H |
Fecha de creación | ^S | ~S |
Fecha de modificación | ^o | ~o |
Fecha de salida | ^D | ~D |
Nombre de archivo | ^l (L minúscula) | ~l (L minúscula) |
*Cualquier dígito | ^9 | \d |
*Cualquier carácter que no sea un dígito | \D | |
*Cualquier letra | ^$ | [\l\u] |
*Cualquier carácter | ^? | . (inserta un punto en Cambiar por) |
* Espacio en blanco (cualquier espacio o tabulación) | ^w | \s (inserta un espacio en Cambiar por) |
* Cualquier carácter que no sea un espacio en blanco | \S | |
* Cualquier palabra | \P | |
* Cualquier carácter que no sea una palabra | \W | |
* Cualquier letra mayúscula | \u | |
* Cualquier carácter que no sea una letra mayúscula | \U | |
* Cualquier letra minúscula | \l | |
* Cualquier carácter que no sea una letra minúscula | \L | |
Todo el texto encontrado | $0 | |
Texto encontrado 1-9 | $1 (especifica el número del grupo encontrado, por ejemplo, $3 para el tercer grupo; los grupos aparecen entre paréntesis) | |
* Kanji | ^K | \K |
Inicio de palabra | \< | |
Fin de palabra | \< | |
Límite de palabra | \b | |
Contrario de límite de palabra | \B | |
Inicio de párrafo | ^ | |
Fin de párrafo [ubicación] | $ | |
Cero o una vez | ? | |
Cero o más veces | * | |
Una o más veces | + | |
Cero o una vez (coincidencia más corta) | ?? | |
Cero o más veces (coincidencia más corta) | *? | |
Una o más veces (coincidencia más corta) | +? | |
Subexpresión de marcado | ( ) | |
Subexpresión sin marcado | (?: ) | |
Conjunto de caracteres | [ ] | |
O | | | |
Operador ‘lookbehind’ positivo | (?<= ) | |
Operador ‘lookbehind’ negativo | (?<! ) | |
Operador ‘lookahead’ positivo | (?= ) | |
Operador ‘lookahead’ negativo | (?! ) | |
Mayús./minús. activado | (?!) | |
Mayús./minús. desactivado | (?-!) | |
Multilínea activado | (?m) | |
Multilínea desactivado | (?-m) | |
Línea por línea activado | (?s) | |
Línea por línea desactivado | (?-s) | |
Ignorar espacio en blanco activado | (?x) | |
Ignorar espacio en blanco desactivado | (?-x) | |
* Cualquier carácter alfanumérico | [[:alnum:]] | |
* Cualquier carácter alfabético | [[:alpha:]] | |
* Cualquier espacio en blanco, espacio o tabulación | [[:blank:]] | |
* Cualquier carácter de control | [[:control:]] | |
* Cualquier carácter gráfico | [[:graph:]] | |
* Cualquier carácter imprimible | [[:print:]] | |
* Cualquier signo de puntuación | [[:punct:]] | |
* Cualquier carácter cuyo código sea mayor de 255 (se aplica sólo a las clases de caracteres anchos) | [[:unicode:]] | |
* Cualquier dígito hexadecimal 0-9, a-f y A-F | [[:xdigit:]] | |
* Cualquier carácter de un conjunto de de pictogramas, como por ejemplo a, í , á, í¢, í£, í¤, í¥, A, í€, í, í‚, íƒ, í„ y í… | [[=a=]] |
También lo tienes como Cheat Sheet en formato pdf
Otros enlaces:
- GREP en IndesignSecrets
- 50 InDesign Scripts and Tools for End Users
- Dándole de comer a Adobe InDesign | Más de 30 Scripts y extensiones
Hola Cristian, 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» 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 antes del signo igual me lo pase del otro lado?
Alguna idea?
Desde ya muchas gracias.
Hola Alejandro,
Utilizamos el operador lookbehind negativo y encontramos por cada línea lo que va antes del =
(^.*(?< !\=))
luego el signo =
luego todo lo que va antes del .
y por último el .
Y le cambiamos el orden
Saludos