Cosas Interesantes

domingo, 17 de enero de 2010

Más RegEx para mejorar los ebooks de Mi PAPYRE reader (Cap.02)

 

 

 

PAPYRE STREETDesde PAPYRE STREET, Coco va a continuar lo que explicamos en el Cap.01 sobre RegEX ayudandonos con más ejemplos de cómo utilizar RegEx, lo que ya hemos comprobado que es muy útil para mejorar nuestros  ebooks. Seguimos usando como ejemplo unas búsquedas sobre el programa SIGIL, pero Coco profesor ya sabeis que podeis utilizar RegEx en otros programas como OFFICE WORD, OPENOFFICE, grep, etc…

MÁS EJEMPLOS PRÁCTICOS
Revisando un ebook me doy cuenta de que hay un problema generalizado con los textos en cursiva.
CLICK para IMAGEN Después de algunos textos en cursiva, como el nombre propio “Kon-Tiki”, por ejemplo; la letra cursiva no acaba después de dicha palabra como debería ser sino que el atributo de cursiva se prolonga mucho más allá, en algunos casos, hasta el final del párrafo. Esto es capaz de arruinar por completo el libro. Pulsad encima de la imagen para ver el tipo de SUSTITUCIÓN que es necesaria.
CLICK para CODE Cómo las palabras itálica son términos concretos (“daymio”, “shogun”, …) podremos realizar la búsqueda apoyandonos en ellas.
Vamos a corregir todas las ocurrencias en la que la palabra “daymio” esté involucrada.
¿QUE HAY QUE BUSCAR?


Como siempre:
- Una parte o cadena de carácteres fija, que es siempre igual. En este caso, el codigo para conectar la cursiva con la palabra “daymio” a continuación:
<span class="italic1em">daimyo
- Una parte variable, que pueden ser varias líneas de texto: Asi pues, entre corchetes ([]) tendremos que escribir una expresión que pueda comprender cualquier texto, de ejemplos anteriores ya conocemos [a-zA-Z0-9]* que encontrará cualquier número (por el asterisco) de letras y números. Pero en este caso no es suficiente, ya que en varias líneas de texto podemos encontrar espacios, guiones, signos de puntuación, exclamaciones, interrogaciones, y caracteres no incluidos en a-zA-z, como las vocales con tílde, por ejemplo. Asi pues añadimos todo eso para dejar una expresión:
[\(\ÑñÓÁÉÍÚ¡!?¿*(¼)\).,;a-zA-Z0-9\-_\s\c]*
Los caracteres especiales van encerrados entre \(\…\) –parentesis-barra inversa- y al final añado “\s” para los espacios (y suele incluir el tabulador). “\-“ es necesario para que encuentre el carácter guión, porque cómo se utiliza para definir las cadenas a encontrar (“A-Za-z0-9”) debe ser tratado como caracter especial. Podiamos haber incluido otros caracteres especiales como: *:«»'-%=º—{ 
- Otra parte no variable, en nuestro caso, el cierre de la etiqueta “span” que termina la aplicación de la class “italic1em”, que aplica un estilo con cursiva: </span>
La expresión completa encerrando la parte variable entre parentesis queda:  

<span class="italic1em">daimyo([\(\ÑÓÁÉÍÚ¡!?¿*(¼)\).,;a-zA-Z0-9-_\s\c]*)</span>
Y ahora tengo que crear la expresión de sustitución:
Será:
<span class="italic1em">daimyo</span>

Porque lo que quiero es que justo después de la cadena “daimyo” se acabe la cursiva. Pero luego tendrá que venir todo el texto que hubiera entre “daimyo” y el cierre de “<span>”; añadimos “\1” que representa la primera parte variable que tengamos en la expresión de búsqueda:
<span class="italic1em">daimyo</span>\1

Click to IMAGE
Si pulsais en las imágenes podreis ver el cambio realizado
Click to IMAGEOTRO EJEMPLO 
CLICK para CODE Si pulsas en la foto, verás el cambio que quiere hacerse:

 


image 

Es decir:
Buscar
<div class="s([0-9{1,0}]*)">(\n\s*)<p class="calibre2"><span class="([a-z]*)">([ñÑÓÁÉÍÚáéíóú¿?,;._A-Za-z0-9\s\-·]*)</span></p>(\n\s*)</div>
Y sustituir por:
<div class="s37">\2<p class="calibre2"><span class ="italic">\4</span></p>\5</div>

“\2”, “\4” y “5” hacen referencia a las partes variables entre parentesis de la expresión de busqueda (la 2nda, la 4ta y la 5ta): (\n\s*),([ñÑÓÁÉÍÚáéíóú¿?,;._A-Za-z0-9\s\-·]*) y (\n\s*) 
respectivamente. 


Esto es todo por hoy, seguiremos poniendo ejemplos de RegEx.


Y recordad, niños, esto es CERCA image15 y esto es LEJOS image315

1 comentario

  1. Tienes un post explicandolo en detalle en http://mipapyreebookreader.blogspot.com/2010/06/resolviendo-dudas-regex-sencillas-para.html

    ResponderEliminar

© Cosas Interesantes