regex 10.0 (explicacion)

16
BÚSQUEDAS AVANZADAS CON «EXPRESIONES REGULARES» EN SIGIL 0.5 o SUPERIOR (v 10.0) (por Carlos. ePubLibre ) Reglas generales: La tabla de expresiones regulares que figura debajo recoge las explicaciones sobre qué es lo que se pretende encontrar con cada una de ellas aportando un pequeño ejemplo, en algunos casos, sobre el tipo de errores a detectar. Está dividida en diferentes secciones que a su vez agrupan búsquedas relacionadas entre ellas. El orden en el que aparecen es importante ya que el funcionamiento de ellas puede variar si no se han realizado correcciones con expresiones que las preceden. Las búsquedas deben efectuarse con las opciones globales de Sigil «Multilínea» (DotAll) y «coincidencia mínima» (Minimal Match) desmarcadas. Cuando la casilla del reemplazo se encuentra vacía implica que lo encontrado se eliminará. LAS EXPRESIONES REGULARES NO SON UN PROGRAMA INFORMÁTICO. No toman decisiones en función de lo que encuentran, las decisiones las debe tomar el editor. Sin ser su uso complicado requieren paciencia sobre todo al principio. Funcionamiento: Si desconoces la forma de realizar búsquedas con expresiones regulares en Sigil esta guía puede ayudarte. La indicación [R] en la numeración de una expresión indica que se trata de una expresión recursiva: es necesario seguir comprobándola hasta no obtener coincidencias o volver a una coincidencia ya comprobada. A. GRUPO DE EXPRESIONES CORRECTORAS En este grupo A se recogen las expresiones regulares destinadas a la corrección de errores frecuentes. Su finalidad es por tanto CORREGIR fallos BÚSQUEDA REEMPLAZO USO 0 LIMPIEZA DE CÓDIGO Este grupo de expresiones tiene como objetivo eliminar aquellas partes del contenido del epub que son innecesarias: etiquetas del lenguaje html, código generado por otros programas, etiquetas en desuso. etc. 0.01 (((?<=/></p)|(?<![pv\d]))>\s*<h\d.*?|ttitulo")\K\sid="[hs]?(.+)?_\d+"|<!--.+--> Elimina los comentarios de la plantilla y las identidades “id” de los encabezados. Versiones anteriores de Sigil crearán de nuevo dichas identidades al regenerar la TOC, pero pueden eliminarse por este mismo procedimiento. NOTA: en la medida de lo posible intenta determinar la existencia de más de un encabezado en una misma sección con el fin de no eliminar las identidades de los encabezados anidados. 0.02 &mdash;|-&nbsp; Sustituye la etiqueta por el símbolo 0.03 &ndash; Sustituye la etiqueta por el símbolo 0.04 (?<![agp]>|\pN|\p{Lu}{2})(&nbsp;(?!</p>|\pL{1,2}\.|[\pN,-]+|\||\p{Lu}\p{Ll}{1,3}&)|&nbsp;(?=</p>))|(?<=<p>|\s)&nbsp;(?!\|| </p>)|\PL\p{Ll}+\K&nbsp;(?=[\pN,-]+) Sustituye la etiqueta &nbsp; por un espacio en blanco, manteniendo dicha etiqueta solamente si de da <p>&nbsp;</p> NOTA: el reemplazo es un espacio en blanco. 0.05 &ldquo; Sustituye la etiqueta &ldquo; por las comillas tipográficas de apertura. NOTA: el reemplazo se obtiene en Windows mediante Alt+0147 0.06 &rdquo; Sustituye la etiqueta &rdquo; por las comillas tipográficas de cierre. NOTA: el reemplazo se obtiene en Windows mediante Alt+0148 0.07 \xAD|&shy; Elimina la etiqueta &shy; o su correspondiente símbolo. Este símbolo introduce un carácter invisible en Sigil y que aparentemente separa partes de la misma palabra. Al no ser visible no es posible realizar una búsqueda simple por lo que es necesaria su localización hexadecimal. 0.08 (?s)<style.+</style>|<p([^>]+)?style[^>]+></p>|<p([^>]+)?\K\sstyle="[^"]+"(?=>)? Elimina la totalidad de código entre etiquetas <style></style> Cualquier estilo que quiera aplicarse al texto en cada sección deberá realizarse mediante clases en el archivo CSS 0.09 <span( style[^>]+| class="calibre\d+")?>([^=\n]+?)</span> \2 Elimina las etiquetas <span> no afectadas de alguna clase. 0.10 class="sgc-\pN{1,3}" Elimina las referencias a las clases creadas por Sigil. Si la clase es múltiple por ejemplo class=”salto25 sgc-2” no la localizará. Este tipo de casos se recogen en otra expresión. 0.11 <i(\s[^>]+)?>(.+?)</i> <em\1>\2</em> Sustituye la etiqueta <i> por <em> 0.12 <b(\s[^>]+)?>(.+?)</b> <strong\1>\2</strong> Sustituye la etiqueta <b> por <strong> 0.13 \pL\K\s?(['´`]+|&rsquo;)(?!\s) Sustituye el apóstrofo ‘ o acentos aislados por el tipográfico. NOTA: el reemplazo se obtiene en Windows mediante Alt+0146 0.14 [.]{3,7}|&hellip;\.?|…\. Detectará tres o cuatro puntos seguidos o la

Upload: turolero

Post on 26-Dec-2015

253 views

Category:

Documents


31 download

TRANSCRIPT

Page 1: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

BÚSQUEDAS AVANZADAS CON «EXPRESIONES REGULARES» EN SIGIL 0.5 o SUPERIOR (v 10.0) (por Carlos. ePubLibre)

Reglas generales:

La tabla de expresiones regulares que figura debajo recoge las explicaciones sobre qué es lo que se pretende encontrar con cada una de ellas aportando un pequeño ejemplo, en algunos casos, sobre el tipo de errores a detectar.

Está dividida en diferentes secciones que a su vez agrupan búsquedas relacionadas entre ellas.El orden en el que aparecen es importante ya que el funcionamiento de ellas puede variar si no se han realizado correcciones con expresiones que las preceden.

Las búsquedas deben efectuarse con las opciones globales de Sigil «Multilínea» (DotAll) y «coincidencia mínima» (Minimal Match) desmarcadas.

Cuando la casilla del reemplazo se encuentra vacía implica que lo encontrado se eliminará.

LAS EXPRESIONES REGULARES NO SON UN PROGRAMA INFORMÁTICO. No toman decisiones en función de lo que encuentran, las decisiones las debe tomar el editor. Sin ser su uso complicado requieren paciencia sobre todo al principio.

Funcionamiento:

Si desconoces la forma de realizar búsquedas con expresiones regulares en Sigil esta guía puede ayudarte.La indicación [R] en la numeración de una expresión indica que se trata de una expresión recursiva: es necesario seguir comprobándola hasta no obtener coincidencias o volver a una coincidencia ya comprobada.

A. GRUPO DE EXPRESIONES CORRECTORAS

En este grupo A se recogen las expresiones regulares destinadas a la corrección de errores frecuentes. Su finalidad es por tanto CORREGIR fallos

Nº BÚSQUEDA REEMPLAZO USO

0 LIMPIEZA DE CÓDIGO

Este grupo de expresiones tiene como objetivo eliminar aquellas partes del contenido del epub que son innecesarias: etiquetas del lenguaje html, código generado por otros programas, etiquetas en desuso. etc.

0.01 (((?<=/></p)|(?<![pv\d]))>\s*<h\d.*?|ttitulo")\K\sid="[hs]?(.+)?_\d+"|<!--.+--> Elimina los comentarios de la plantilla y las identidades “id” de los encabezados. Versiones anteriores de Sigil crearán de nuevo dichas identidades al regenerar la TOC, pero pueden eliminarse por este mismo procedimiento.

NOTA: en la medida de lo posible intenta determinar la existencia de más de un encabezado en una misma sección con el fin de no eliminar las identidades de los encabezados anidados.

0.02 &mdash;|-&nbsp; — Sustituye la etiqueta por el símbolo

0.03 &ndash; – Sustituye la etiqueta por el símbolo

0.04 (?<![agp]>|\pN|\p{Lu}{2})(&nbsp;(?!</p>|\pL{1,2}\.|[\pN,-]+|\||\p{Lu}\p{Ll}{1,3}&)|&nbsp;(?=</p>))|(?<=<p>|\s)&nbsp;(?!\||</p>)|\PL\p{Ll}+\K&nbsp;(?=[\pN,-]+)

Sustituye la etiqueta &nbsp; por un espacio en blanco, manteniendo dicha etiqueta solamente si de da <p>&nbsp;</p>

NOTA: el reemplazo es un espacio en blanco.

0.05 &ldquo; “ Sustituye la etiqueta &ldquo; por las comillas tipográficas de apertura.

NOTA: el reemplazo se obtiene en Windows mediante Alt+0147

0.06 &rdquo; ” Sustituye la etiqueta &rdquo; por las comillas tipográficas de cierre.

NOTA: el reemplazo se obtiene en Windows mediante Alt+0148

0.07 \xAD|&shy; Elimina la etiqueta &shy; o su correspondiente símbolo.

Este símbolo introduce un carácter invisible en Sigil y que aparentemente separa partes de la misma palabra. Al no ser visible no es posible realizar una búsqueda simple por lo que es necesaria su localización hexadecimal.

0.08 (?s)<style.+</style>|<p([^>]+)?style[^>]+></p>|<p([^>]+)?\K\sstyle="[^"]+"(?=>)? Elimina la totalidad de código entre etiquetas <style></style>

Cualquier estilo que quiera aplicarse al texto en cada sección deberá realizarse mediante clases en el archivo CSS

0.09 <span( style[^>]+| class="calibre\d+")?>([^=\n]+?)</span> \2 Elimina las etiquetas <span> no afectadas de alguna clase.

0.10 class="sgc-\pN{1,3}" Elimina las referencias a las clases creadas por Sigil.

Si la clase es múltiple por ejemplo class=”salto25 sgc-2” no la localizará. Este tipo de casos se recogen en otra expresión.

0.11 <i(\s[^>]+)?>(.+?)</i> <em\1>\2</em> Sustituye la etiqueta <i> por <em>

0.12 <b(\s[^>]+)?>(.+?)</b> <strong\1>\2</strong> Sustituye la etiqueta <b> por <strong>

0.13 \pL\K\s?(['´`]+|&rsquo;)(?!\s) ’ Sustituye el apóstrofo ‘ o acentos aislados por el tipográfico.

NOTA: el reemplazo se obtiene en Windows mediante Alt+0146

0.14 [.]{3,7}|&hellip;\.?|…\. … Detectará tres o cuatro puntos seguidos o la

Page 2: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

etiqueta equivalente, que deberían ser puntos suspensivos y los reemplazará por … (que es un único carácter)

0.15 (?i)(?<=\PL)([dntv])í(?=\PL) \1i Eliminará los acentos en dí, ní, tí y ví.

0.16 (?i)(?<=\PL)([dst])e(?=[\.;»”\?!\)]) \1é Añadirá los acentos a de, se y te en posición previa a puntuaciones.

0.17 (?i)[^\pN\pL]\K([i1í],?([aée])|(é|e|(?-i)a)[i1í])(?=[^\pL"]) \3l\2 Términos buscados que pueden actuar como artículos:

1a 1e 1é !a !e

!é a1 ai aí a¡

a! e1 ei eí e¡

e! é1 éi éí é¡

é! ia ie ía íe

NOTA: hay que prestar atención en libros de ciencias a esta expresión.

La expresión cambiará a minúsculas todas las « L» detectadas (tanto las de inicio de párrafo como las que siguen a símbolos de puntuación que impliquen que se continúe con mayúscula. Sin embargo este hecho se corrige con el uso de otras expresiones posteriores de la tabla.

Existen tres excepciones Ai A1 y Aí que aún pudiendo ser Al no se modificarán ya que Ai puede ser nombre propio.

0.18 (?i)(?<=\PL)((aqu)é(llo)|é(st?o))(?!s) \2e\3\4 Eliminará los acentos de esto, eso y aquello.

0.19 (?<![\pN,-])0(s?)(?=\s\PN{5,}) o\1 Corrige el uso del cero en funciones de ONOTA: hay que prestar atención en libros de

ciencias a esta expresión aunque tiene en cuenta que el 0 no vaya precedido de números o coma decimal.

0.20 (?i)(?<=\PL)(aj|ojal)a(?=\PL) \1á Añadirá los acentos a aja y ojala.

0.21 (?i)\PL\K(c)orno(?=\PL) \1omo Corrige el término corno.

0.22 (?<!gton|,)\PL\K(?|([aAdD])\.?\s?[cC](?=[^.])|([aAdD])\s?[cC]\.|([aAdD])\.\s?c\.?|([AD])\.\s?C\.?|([ad])\.C\.)(?=\PL) \L\1\E. C. Corrige las distintas formas de abreviaturas de «antes de Cristo» y «después de Cristo»

NOTA: RAE. Abreviaturas

0.23 \pL\K6(?=n[\pP\s]) ó Corrige errores de OCR en palabras agudas terminadas en «6n» en vez de «ón»

0.24 (?<!<body>\n\s{2})<p[^=>]*>(<[^>]+>)*(&nbsp;)*(</[^>]+>)*</p>\s* Esta expresión localiza distintos tipos de párrafos sin contenido, anulándolos.

1 COMILLAS

Este grupo de expresiones tiene como objetivo adecuar el uso de los distintos tipo de comillas.Antes de nada señalar que es imposible garantizar la perfecta sustitución de las comillas. El número de

posibilidades en las que se encuentran, el propio uso diferente que hacen los autores para las mismas situaciones y el añadido de formar parte del código html, determina la ausencia de patrones inequívocos de búsqueda.

Aún así, partimos de la base de que es preferible corregir algún tipo de comillas mal colocadas, una vez pasadas las RegEx, que no tener que hacerlo manualmente con la totalidad del texto.

Son expresiones complejas motivado por la dificultad de distinción de los símbolos de apertura y cierre cuando en el texto sólo se usan comillas inglesas "

Hay dos formas de enfrentarse a su localización y sustitución:Método simple: exacto al empleado en versiones iniciales de las RegEx.Método avanzado: basado en 9 pasos. El proceso consiste en sustituir todo tipo de comillas del texto por las

angulares «», independientemente de si deben serlo o no.Las expresiones 1.021 y 1.022 realizan tareas auxiliares previas consistentes en detectar pares de comillas

cuando alguna de ellas está separada de la frase o justamente lo contrario: aquéllas que tienen caracteres adosados por ambos lados, con el fin de corregir la situación previamente a su transformación en angulares.

La transformación en sí se realiza con las expresiones 1.023 y 1.024.Las expresiones 1.025 y 1.026 se «encargan» de localizar y sustituir las comillas anidadas por las tipográficas

“”La expresión 1.027 identifica las continuaciones de diálogos o pensamientos para iniciarlas con »La expresión 1.028 es un complemento de la 1.025 y 1.026, que se da en menos ocasiones: pensamientos o

relatos en varios párrafosLa expresión 1.029 intentará localizar algunos casos dudosos o comillas que hayan quedado aisladas.

NOTA: RAE (Comillas 3)

1.01 Método simple

Este procedimiento se ajusta al criterio seguido en versiones iniciales de las expresiones regulares. Es válido para textos sencillos con un uso escaso de entrecomillados. El método empleado se basa en localizar primero los entrecomillados simples y a continuación los anidados si éstos existen.

Tiene un inconveniente: las comillas internas en un conjunto anidado se mantienen como estaban originalmente y hay que realizar su sustitución de forma manual por las tipográficas “”

1.011 (?<!=)["“]([^-\s>]([^"\n]+?)?)(?<!\s)["”](?=[^>]) «\1» Para transformar dobles comillas "" o “” por comillas angulares «».

Se diferencia de la expresión 1.012 en que no contempla la posibilidad de entrecomillados anidados sino que los selecciona de forma independiente.

Ejemplo: este es un caso “sencillo”Ejemplo: este es un caso “sencillo”Quedando: este es un caso «sencillo»

La existencia de textos anidados entre comillas no se puede corregir mediante esta expresión ya que nos quedaría algo parecido a:

este es «un caso »anidado« de dos »grupos« de comillas»

1.012 (?<!=)["“]([^-\s>]([^\n=#]+)?)["”](?=[^>]) «\1» Para transformar dobles comillas "" o “” por comillas angulares «».

La expresión busca en cada párrafo y, si existen más de dos comillas en él, transforma en angulares las más externas, dejando las interiores igual, ya que lo más probable es que se traten de comillas anidadas. De esta manera se siguen las indicaciones de la RAE.

Pero hay ocasiones en que en un párrafo puede haber varios grupos de comillas que no estén anidadas. En esta situación hay que emplear la expresión 1.011.

Page 3: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

Ejemplo: este es “un caso “anidado” de dos “grupos” de comillas”

Quedando: este es «un caso “anidado” de dos “grupos” de comillas»

1.02 Método avanzado

Este procedimiento está aconsejado para textos con un elevado número de citas. Es un proceso mucho más complejo y con el que conviene tener especial cuidado.Parte de dos premisas que no siempre se cumplen y que son: que no faltan comillas de apertura o cierre que debieran

existir y que los diálogos o pensamientos que continúan en diferentes párrafos tienen en algún momento unas comillas de cierre.Consta de 9 pasos diferenciados que en su mayoría trabajan sobre el párrafo completo. Esto implica que para realizar

adecuadamente su trabajo deben «pasar» más de una vez por él al no existir un comando que realice tareas de recursividad. Es decir si se usa reemplazar todo es posible que sea necesario realizar esa acción varias veces para cada expresión.El uso independiente de las expresiones 1.023 y 1.024 puede devolver resultados engañosos, pues como se ha

señalado en la introducción del grupo 1, el procedimiento a seguir siempre convierte todas las comillas en angulares, tengan o no que serlo, de forma que posteriores expresiones se encarguen de modificarlas adecuadamente. Si una vez realizado todo el proceso vuelven a emplearse las mencionadas expresiones, volverían a detectar casos que habrían sido corregidos por el resto de expresiones.

A los efectos de este grupo de expresiones, el término «recursiva» implica la repetición de la misma expresión de búsqueda una vez completada, es decir: no aparecerán coincidencias (dentro de un mismo párrafo) si no se ha realizado la corrección de la primera coincidencia encontrada en ese párrafo.Lo más aconsejable es una vez realizado el

reemplazo volver a contar el número de coincidencias que se obtienen con la expresión que se acaba de usar.

[R]1.021

(?|[\s(¿¡>]['"“”‘’]\S[^'"“”‘’\n]+\K\s(['"“”‘’][,.;:?!\s)<])|([\s(¿¡>]['"“”‘’])\s(?=[^'"“”‘’\n]+['"“”‘’][,.;:?!\s)<])) \1 Localiza comillas aisladas y que por tanto tienen que ajustarse a su posición correcta previamente a su transformación en angulares.

Ejemplo en esta palabra “ hay" un errorQuedando: en esta palabra “hay" un errorEjemplo en esta “palabra “ hay un errorQuedando: en esta “palabra“ hay un error

Dado el funcionamiento de la expresión se requiere la existencia del par de comillas y que una de ellas se encuentre aislada de su correspondiente palabra. Comillas totalmente aisladas sin pareja se intentan detectar con la expresión 1.028

NOTA: Dado que es posible que ambas comillas se encuentren aisladas del texto en ocasiones habrá que «pasar» más de una vez por las frases, es decir esta expresión puede ser recursiva.

[R]1.022

(?|((?<!>)[.,:;?!”»](?!«)|(?<!["g\d]|<p)>[.,:;]?|\s[^\s<=/(¡¿«“"]+)(?<!\s—|<em>)\K([“«"])(?![.,:;)?!—>\s]|…?<(su|a|/p)|[»”"][.,:;]|[aeouy][“«"])(?=[^\n]+?(?<![\s=\d])["”](?!>))|\pL\K([”»"])([\pL(¡¿«“]|—\pL))

\1 \2 Esta expresión localiza comillas con caracteres a ambos lados de ella, sean de apertura o de cierre, separándolas adecuadamente.

Ejemplo Aquí“hay un errorQuedando: Aquí no “hay un errorEjemplo Aquí hay»un errorQuedando: Aquí no hay» un error

NOTA: En el caso de comillas inglesas determinadas situaciones no pueden ser discriminadas con exactitud ya que la comilla analizada pudiera ser tanto de apertura como de cierre. En estos casos el reemplazo puede ser erróneo y por tanto las transformaciones posteriores realizadas por las expresiones de este grupo 1.02. Sin embargo los errores que se hubieran podido cometer producirán detecciones de las expresiones correspondientes a comillas del grupo 6.Al igual que para la expresión anterior, esta

expresión es recursiva.

[R]1.023

(<p([^>]+?)?>[»—]?|[\s(¡¿—«])(<[^>/]+?>)?\K[“"](?![-\s—.,?!):;]|http) « Esta expresión busca en exclusiva comillas de apertura no angulares para sustituirlas por las angulares.

Ejemplo: este es ”un caso “anidado» de dos “grupos» de comillas»Quedando: este es «un caso «anidado» de dos

«grupos» de comillas»

NOTA: Al igual que para la expresión anterior, esta expresión es recursiva.

[R]1.024

(?<!jp|pn|cs|shee|htm|\pN\.|-)[\pN\pL.?!\-»’>)…]\K[’"”](?="\PL|</|[^>\n\pL¿¡"«](?!>|/>|class|id=|height|href|src|style|title|width))

» Esta expresión busca en exclusiva comillas de cierre no angulares para sustituirlas por las angulares.

Ejemplo: este es “un caso “anidado” de dos “grupos” de comillas”

Quedando: este es ”un caso “anidado» de dos “grupos» de comillas»

NOTA: Esta expresión es recursiva, si en un párrafo hay más de unas comillas de cierre, en la primera pasada sólo se sustituirá una

Ejemplo: este es “un caso anidado de un “grupo de comillas””

Quedando: este es “un caso anidado de un “grupo de comillas»”

Si se emplea reemplazar todo, una vez usado es necesario seguir empleándolo hasta obtener que no se encuentran más coincidencias.

Quedando: este es “un caso anidado de un “grupo de comillas»»

[R]1.025

(«|<p([^>]+?)?>—?»)([^»\n]+?)?(?<!=)\K[«"]([^\s>][^\n"=«]+?)["»] “\4” Esta expresión detecta grupos de comillas anidados localizando inicialmente el símbolo de apertura « en alguna parte del párrafo.Esta expresión tiene en cuenta que el cierre de

las comillas de apertura puede encontrarse en otro párrafo distinto.

Ejemplo: este es «un caso «anidado» de dos «grupos» de comillasQuedando: este es «un caso “anidado” de dos

«grupos» de comillas

NOTA: Esta expresión es recursiva, si en un

Page 4: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

párrafo hay más de unas comillas anidadas, en la primera pasada sólo se sustituirá el primer grupo. Si se emplea reemplazar todo, una vez usado es necesario seguir empleándolo hasta obtener que no se encuentran más coincidencias.

Quedando: este es «un caso “anidado” de dos “grupos” de comillas

[R]1.026

(?<!=)[«"]([^\s>]([^\n"=«]+?)?)["»](?=(([^«\n]+?))?») “\1” Esta expresión es complementaria de la anterior y también detecta grupos de comillas anidados pero localizando inicialmente el símbolo de cierre » en alguna parte del párrafo.Esta expresión tiene en cuenta que la apertura

de las comillas de cierre puede encontrarse en otro párrafo distinto.

Ejemplo: este es un caso «anidado» de dos «grupos» de comillas»Quedando: este es un caso «anidado» de dos

“grupos” de comillas»

NOTA: Esta expresión es recursiva, si en un párrafo hay más de unas comillas anidadas, en la primera pasada sólo se sustituirá el primer grupo. Si se emplea reemplazar todo, una vez usado es necesario seguir empleándolo hasta obtener que no se encuentran más coincidencias.

Quedando: este es un caso “anidado” de dos “grupos” de comillas»

[R]1.027

(<p([^>]+?)?>[»«]|«)[^\n»]+\n{2}[^\n]+<p([^<]+?)?>—?\K«(?=[^\n]+?</p>)|<p([^>]+?)?>—[^\n]+\n{2}[^\n]+<p([^<]+?)?>—?\K«(?=[^—][^\n»]+?</p>)

» Esta expresión localizará los posibles diálogos o pensamientos que continúan en párrafos sucesivos.

Ejemplo: «Este es un caso de continuidad de diálogoQuedando: »Este es un caso de continuidad

de diálogo

NOTA: Esta expresión es recursiva, ya que verifica lo existente en el párrafo anterior. Si se emplea reemplazar todo, una vez usado es necesario seguir empleándolo hasta obtener que no se encuentran más coincidencias.Si a un diálogo le sigue un pensamiento en

más de un párrafo cambiará erróneamente las primeras comillas del pensamiento.

[R]1.028

«([^\n»]+?)»(?=([^\n«]+\n{2}+){1,10}.+<p([^>]+?)?>[^«»][^\n«]+?») “\1” Esta expresión trabaja sobre varios párrafos a la vez e intenta localizar textos entre comillas dentro de otro entrecomillado cuando el principal ocupa varios párrafos.

Ejemplo: «Este es un caso anidado de comillas en el que éste es otro párrafo y éste otro «párrafo» más y así sucesivamente hasta que se produce el cierre

principal de comillas».Quedando: «Este es un caso anidado de

comillas en el que éste es otro párrafo y éste otro “párrafo” más y así sucesivamente hasta que se produce el cierre

principal de comillas».

NOTA: Esta expresión es recursiva, ya que verifica lo existente en párrafos anteriores. Si se emplea reemplazar todo, una vez usado es necesario seguir empleándolo hasta obtener que no se encuentran más coincidencias.

1.029 <p([^>]+?)?>([^"\n]+)?[^"=]\K['"]|>[«»]</ No hay Ésta es una comprobación final que buscará posibles comillas sin pareja o dudosas.

2 GUIÓN DE DIÁLOGO —

Este grupo de expresiones forma seguramente el núcleo principal de las búsquedas ya que de su correcta posición depende la mayoría de la veces el disfrute de la lectura.El reemplazo puede no valer si la estructura de la frase es errónea, por ejemplo si alguno de los guiones

implicase un párrafo nuevo y cambio de interlocutor.

NOTA: RAE (Raya: usos 2.3)

2.01 (?|\pP\s\K[-–](?=\s(\pP+)?\p{Lu})|(?<!em|ng)[\s“«»”>!?]\K—?[-–](?=[\PN{2}\S]|\s[^\pN\p{Lu}«¡¿])|\S{2}\K[-–](?=\s|[^\pL\pN]))

— Sirve para transformar los guiones del tipo signo menos (-) o &ndash; (–) por el guión de diálogo mdash (—)

Ejemplo: Este es un caso de -guiones explicativos- en textoQuedando: Este es un caso de —guiones

explicativos— en texto

2.02 ((?<!>)»|[\pN\pL!?)\]”](<.+?"?>)?)[—–]((<.+?"?>)?[\pN\pL¡¿(\[«“]) \1 —\3 Detectará guiones — pegados a una letra por cada lado.

Aquí no hay posibilidad de reemplazo porque el espacio puede estar por delante o por detrás, así que hay que verlos uno a uno.

Ejemplo: Este es un caso de—guiones explicativos—en texto

En el primer caso el espacio hay que dejarlo por delante del guión y en cambio en el segundo tiene que ser por detrás.

NOTA: El reemplazo siempre se efectúa dejando el espacio en blanco por delante, por lo que en ocasiones será incorrecto. Pero en estos casos la expresión posterior 2.06 realizará su posicionamiento correcto.

2.03 (\s\K—[^—\n]+[^.,:;])(\s|(?|((?<!etc|C|[.\s].)\.)|([,;:])))(—)(?=\s|[,\.;:]) \1\4\3 Esta expresión detectará errores de espacios

Page 5: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

inmediatamente antes del guión — de cierre en frases entre dos guiones.

Ejemplo: Este es un caso —posible de guiones — en texto

Quedando: Este es un caso —posible de guiones— en texto

También detecta situaciones de permutación de símbolos de puntuación en el guión de cierre.

Ejemplo: Este es un caso —posible de guiones.— En texto

Quedando: Este es un caso —posible de guiones—. En texto

2.04 (\s\K—)[\s.,:;]{1,2}([^—\n]+?\S(—|$)) \1\2 Esta expresión detectará errores de espacios inmediatamente después del guión — de apertura en frases entre dos guiones.

Ejemplo: Este es un caso — posible de guiones— en texto

Quedando: Este es un caso —posible de guiones— en texto

2.05 (<p([^>]+?)?>—[^—\n]+[^\s])(—)(|\pP)(\s)—? \1\4\5\3 Esta búsqueda busca dos patrones específicos que no pueden darse: una frase entre guiones — cuando el de apertura es el del propio inicio del diálogo o dos guiones de apertura consecutivos sin guión de cierre. Finaliza la resolución de determinados casos corregidos con la expresión 2.04.

Ejemplo: <p>—Este es el caso señalado—, en el texto

Quedando: <p>—Este es el caso señalado, —en el texto

Ejemplo: —Este es el caso señalado, —en el texto

Quedando: —Este es el caso señalado—, en el texto

NOTA: En ocasiones la detección se debe a que ha localizado un salto de párrafo incorrecto cuando debiera producirse una continuidad con el anterior. En este caso el reemplazo propuesto no es válido y hay que realizar manualmente la eliminación del salto de párrafo.

2.06 (\s—[^\n—]+?)(|[.,:;])(\s)(—) \1\4\2\3 Esta búsqueda puede tener una utilidad doble pues se trata de un comentario entre guiones en el que el guión — final está mal colocado, bien por haberse «separado» de la última palabra o bien por que debiera comenzar un nuevo párrafo.

Ejemplo: —Este es un caso —posible, —que puede solucionarse.

Quedando: —Este es un caso —posible—, que puede solucionarse.

Pero en cambio:

Ejemplo: <p>En este caso —¿Sabes? —¿Qué?

El diálogo debe aparecer en párrafo nuevo y por tanto la sustitución hay que hacerla manualmente.

2.07 (—[\.,:;\s]|<p([^>]+)?>(?!\P{Ll}+[.:]—))([^—\n]+)(—)([\.,:;]?)(\s) \1\3\5\6\4 Localiza frases en las que existiendo un guión explicativo de cierre falta su apertura y en donde lo más probable es que el guión de cierre sea realmente de apertura.

Ejemplo: —Espera —dijo—. No te vayas— le acució.

Quedando: —Espera —dijo—. No te vayas —le acució.

NOTA: Se ha excluido de la detección los inicios de obras de teatro en los que a la etiqueta de párrafo sigue el nombre del personaje en mayúsculas y una raya.

2.08 (?<=\s)—[^—\n]+\s\P{Lu}+[-–](?=\s|\pP|\p{Ll}[^<—\n]+?</p>)|<p(>|.+?>)—[^\n—]+\s[^\p{Lu}—]+[^\s\pN][-–]\P{Lu}[^\n\pP<—]+([^\s]—|(?=\.</p>))

No hay Detecta la presencia de guiones cortos que apareciendo como parte de una palabra compuesta debieran ser guiones explicativos.

Ejemplo: —los guiones usados-no están bien delimitadosDebiendo ser —los guiones usados— no

están bien delimitados

NOTA: En ocasiones la detección se debe a que ha localizado en la frase un signo menos que forma parte de un nombre compuesto y que por tanto no se trata de un guión que debiera ser raya.

2.09 <p([^>]+)?>(?!\P{Ll}+[.:]—)[^—«»][^—\n]+(?<!>)—(?=[^—\n]+$) No hay Esta expresión detecta errores de guiones de diálogo o explicativos en el caso de que en el párrafo solo exista uno. Excepto cuando en el comienzo del párrafo aparezcan comillas angulares que indiquen una continuación de diálogo iniciado en párrafos anteriores.

NOTA: Se ha excluido de la detección los inicios de obras de teatro en los que a la etiqueta de párrafo sigue el nombre del personaje en mayúsculas y una raya.

3 SIGNOS DE PUNTUACIÓN

Este grupo busca distintos errores relacionados con diferentes signos de puntuación del texto. Los más frecuentes son la ausencia de mayúscula tras un punto o la separación de los signos de puntuación del texto.

3.01 ([\pL?!»”)\]]…|(?<!—)\.|[\pL\d—>”»\])]|[?!](?!\s\.))\s([,.;:\?!»”’)]) \1\2 Esta expresión buscará espacios entre la última letra de un texto y los caracteres de puntuación que le siguen:

Ejemplo: los dos puntos : se encuentran

Page 6: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

separados del textoQuedando: los dos puntos: ya no se

encuentran separados del textoEjemplo: sucede lo mismo— . con el punto

tras el guión.Quedando: ya no sucede lo mismo—. con el

punto tras el guión.

3.02 (?<!"|[\s;]\p{Lu}|\..|[\s;].{2}|\s\p{Ll}{3}|\s\p{Lu}\p{Ll}{2})[;,.:]{2,}|\pL\K\.\.|…\.|[.,:;]<(a|s)[^\n,]+?[^;]</a>(</sup>)?[.,;:] … Esta expresión busca signos de puntuación consecutivos que no pueden darse como dos puntos seguidos o un punto seguido de coma.En lo posible trata de evitar detecciones de

iniciales seguidas de coma del tipo Washington D. C., o Murder Inc., o etc.,

Ejemplo: Este es un caso no válido..Ejemplo: Este es otro caso,, detectado

NOTA: aunque se propone un reemplazo por el caracter puntos suspensivos, la casuística es muy amplia y en muchos otros casos lo necesario es suprimir alguno de los caracteres repetidos o incluso eliminarlos.

3.03 (?|([¡¿«‘“([])\s(\S)|(\S-)\s) \1\2 Esta expresión busca signos de apertura separados por un espacio del texto que les sigue.

Ejemplo: ¿ Aquí detectaría el espacio previo al texto.Quedando: ¿Aquí ha suprimido el espacio

previo al texto.Ejemplo: « Aquí detectaría el espacio

previo al texto.Quedando: «Aquí ha suprimido el espacio

previo al texto.

3.04 ((?<!ww|&am|bs)[—\pL][\.,;:\?!”»)\]]{1,3}|\pL…)(([¡¿«“—]){0,2}(\b|(?i)[áéíóúñ]).(?!.."|html|(et|om|rg)[\s\pP<])) \1 \2 Esta expresión busca un texto seguido de algún signo de puntuación y seguido de otro texto pero sin la existencia del espacio de separación entre ellos.

Ejemplo: Este sería el caso,más simple que detectaría.Quedando: Este sería el caso, más simple ya

corregido.

NOTA: en el reemplazo hay un espacio entre \1 y \2Tras el uso de esta expresión es conveniente

la revisión con algunas de las expresiones del grupo B con el fin de evitar el salto de línea en los espacios de separación entre las abreviaturas.

3.05 (?(?=<p.+(?:centr|dere|sub[ct]).+?">) |<p(?:[^/>]+)?>[^\n]*\K(?|([^\d…!?.])(?=\s<a)|(((?<!&nbsp|\.|,\s\d{3})[^"?:!.»…*/>\])]|(?<!/>|[….?;!>]|\.\pN|\.\d{2})</[^c>]+?>)(?=</p>\s*<p([^/>]+"(?!derecha)[^/>]+(?<!derecha)")?>(<[^>]+?>)?\pP*\p{Lu}(?!ios)|</p>\s*</?[bd]))))

\1. Esta expresión detecta saltos de párrafo sin punto final.Aunque se propone un reemplazo consistente

en la adición del punto final hay que tener en cuenta que la búsqueda puede dar como resultado un final de párrafo que no debiera serlo cuya corrección sólo puede realizarse de forma manual.También detectará la separación de la llamada

a las notas de la palabra.Los resultados pueden ser válidos en finales

de estrofas, títulos de capítulos, finales de cartas…

La expresión no analiza los encabezados <h> de capítulo, ni tampoco los párrafos que incluyen una clase que contenga en alguna parte de su texto «subt» o «subc» en la hipótesis de que se tratan de subcapítulos. Tampoco analiza párrafos que incluyan la clase derecha en la hipótesis de que se tratan de pies de carta.

Igualmente no detectará la ausencia de punto final si el párrafo siguiente comienza por minúscula, en la hipótesis de que puede tratarse de un verso.

3.06 [¡¿,.;:<—«“\(\[]{1,3}\.(?=</p>) . Esta expresión busca finales de párrafo con signos de puntuación que no pueden encontrarse en esa posición.

3.07 [—;,.:]{2,}\s[—;,.:]|([:.—…;])\s\1|[:.—…;]\s[,.;:]|[.;:,]\s[?!] No hay Esta expresión busca combinaciones de signos de puntuación que no deben darse

Ejemplo: Este sería un caso—. —que tiene que detectar.

3.08 (?|(\PN\K\pN)[\s.](\pN{3}(?!\.\pN))|(\pN)\s(%)) \1\2 Esta expresión busca números de 4 cifras o cifras con porcentajes para eliminar el punto de millar o el posible espacio previo al símbolo %

Ejemplo 1.234Quedando 1234Ejemplo 5 %Quedando 5%

NOTA: RAE (Números 2a) y RAE (Números 1.2c)

[R]3.09

(?|(?<=\d{2}|\d{3})\.?(\d{3})(?![.\d])|(?<=\d)\.?(\d{3})(?=&)) &nbsp;\1 Esta expresión elimina los puntos de millares en números mayores de 4 cifras sustituyéndolos por espacios realizados con la etiqueta &nbsp;También detectará números con más de

cuatro cifras en los que no se ha empleado ni el espacio ni el punto el su división.

Ejemplo: 12.345.678.900Quedando: 12&nbsp;345&nbsp;678&nbsp;900Ejemplo: 12345678900Quedando: 12&nbsp;345&nbsp;678&nbsp;900

Tras el uso de esta expresión es conveniente la revisión con algunas de las expresiones del grupo B con el fin de evitar el salto de línea en los espacios de separación entre los números.

Page 7: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

NOTA: RAE (Números 2a)

3.10 (?|(([?!])(<[^>]+?>)?)\.|(?<!etc|\s\p{Lu})[,.:;]((<[^>]+?>)?[?!])) \1 Esta expresión busca frases finalizadas en interrogación o interjección y que van seguidas de un punto. También busca el caso inverso.

Ejemplo: ¡Éste sería un caso encontrado!.Quedando: ¡Éste sería un caso encontrado!Ejemplo: ¡Éste sería otro caso encontrado.!Quedando: ¡Éste sería otro caso encontrado!

3.11 \pN\s.{1,2}\K\.(?!\s\p{Lu}|</[hp]|[&\pL]) Mediante esta expresión se detectan símbolos seguidos de un punto para proceder a su eliminación.

Ejemplo: Se trataba de un cañón de 200 mm.Quedando: Se trataba de un cañón de 200

mm

NOTA: RAE (Símbolos 2a)

4 PUNTOS SUSPENSIVOS

Este grupo de búsquedas localizará posiciones erróneas del carácter único puntos suspensivos: …

NOTA: RAE (Puntos suspensivos)

4.01 (…)(—[^\s\.,;:]) \1 \2 Esta expresión busca puntos suspensivos al final de una frase y que se encuentran unidos a un guión — de apertura.

Ejemplo: Éste es un caso…—detectado por la búsqueda.Quedando: Éste ya no es un caso… —

detectado por la búsqueda.

NOTA: el reemplazo lleva un espacio en blanco entre las sustituciones \1 y \2

4.02 (<.+?"?>)?(—:?)[.,;]?\s(…\s)|(—)(\s)(…) \1\2\3\4\6\5 Esta expresión sirve para localizar puntos suspensivos iniciales separados tanto del guión de diálogo inicial del párrafo como de la primera palabra.

Ejemplo: <p>— … Ésta es una frase que tiene que detectar.

Quedando: <p>—… Ésta es una frase que ya no detectará.

4.03 (((?|[—«]|<[^>]+?>)[¡¿]?…)([,;](?=\S))?)(<[^>]+?>)?(?![,;\s”»?!<)]|</p>) \1 \4 Esta expresión detecta puntos suspensivos iniciales que se encuentran adosados a texto.

Ejemplo: Esta situación «…debe» detectarse.Quedando: Esta situación ya no «… debe»

detectarse.

NOTA: Hay un espacio final en blanco tras \1NOTA: RAE (Puntos suspensivos 2h)

4.04 (…)\s(—\s|[»!\?)]) \1\2 Esta expresión detecta un espacio en blanco tras puntos suspensivos finales y previos a un guión de cierre, o cierre de interjecciones, interrogaciones o comillas.

Ejemplo: Esta situación… — debe detectarse.Quedando: Esta situación…— no debe

detectarse.Ejemplo: Esta situación… !, debe

detectarse.Quedando: Esta situación…!, no debe

detectarse.Ejemplo: Esta situación… ? Debe

detectarse.Quedando: Esta situación…? No debe

detectarse.Ejemplo: Esta situación… » debe

detectarse.Quedando: Esta situación…» no debe

detectarse.

4.05 (?|([^—;:,\.])|(?<![:;.,—]))\s(…[\s?,:;!)]) \1\2 Esta expresión localiza puntos suspensivos con un espacio a ambos lados, cuando el carácter precedente no es un guión ni un signo de puntuación.

Ejemplo: Éste es un ejemplo … en el que tiene que detenerse.

Quedando Éste no es un ejemplo… en el que tiene que detenerse.

5 MAYÚSCULAS Y MINÚSCULAS

Este grupo de búsquedas detectará errores en los textos relacionados con el punto y sus equivalentes a efectos ortográficos.Muchas de las expresiones pueden dar detecciones en lugares válidos pues muchas son las posibilidades del

idioma en el uso de las mayúsculas, los reemplazos que se proponen lo son para aquellos casos en los que el revisor decida que debe hacerse el cambio.

5.01 ([^>(\p{Lu}.]{4}\K[^\p{Lu}c]—?\.[»)]?(<[^>]+?>)?\s|[^c]\.\s—|(?:[…?!.]\s—[^—]+|[…!?.]+[^—]*)\K—:\s)(\p{P}{0,2}<[^>]+?>)?([¿¡«\(\[]{0,2})(\p{Ll})(?![.)])

\1\3\4\U\5\E Esta expresión detectará situaciones en las que tras un punto o su equivalente ortográfico la siguiente palabra comience por minúscula.Dentro de lo posible intenta no detenerse tras

abreviaturas con punto seguidas de minúscula, aunque dadas las limitaciones del propio lenguaje RegEx no siempre es posible.

NOTA: en ocasiones el punto detectado debe ser otro signo de puntuación diferente en cuyo caso debe ser sustituido de forma manual.

5.02 (([,;]\s[¿¡]|—,\s|,\s—)(\p{P}{0,2}<[^>]+?>)?([¿¡«\(\[]){0,2})(\p{Lu}) \1\L\5\E Esta expresión busca situaciones en las que se combinan simultáneamente una coma y un guión de diálogo y comprueba si tras esa coma aparece una mayúscula.

Page 8: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

Ejemplo: Éste sería un caso, —En el que existiría detecciónQuedando: Éste no sería un caso, —en el que

existiría detecciónEjemplo: Éste sería un caso—, En el que

existiría detección Quedando: Éste no sería un caso—, en el que

existiría detección NOTA: en el caso que la primera letra fuese

un nombre propio aunque exista una detección del patrón buscado no se trataría obviamente de un error.

También puede darse la circunstancia de que la coma deba ser un punto, en cuyo caso hay que corregirlo manualmente

5.03 (?|(\pL[!?»”)\]]?—)(\s)|(\pL)(\s—)|(\pL<[^\n?!,;:.]+?\.\.[^<]+?<[^\n=]+>)(\s)—)((\pP{0,2}<[^>]+?>)?\pP{0,2}(?<!«)\p{Lu}) \1.\2\3 Esta expresión actúa prácticamente como inversa de la anterior ya que su cometido es comprobar, cuando hay un guión de diálogo por medio, si la presencia de una mayúscula viene precedida de un signo de puntuación. Ejemplo: En este caso— Es posible que

exista un error.Quedando: En este caso—. No existe un error.Ejemplo: En este caso —Es posible que

exista un error.Quedando: En este caso. —No existe un error. NOTA: al igual que en la expresión anterior si

la primera letra fuese un nombre propio aunque exista una detección del patrón buscado no se trataría de un error.

5.04 (<p([^>]+)?"?>)([—»«]?)[\s./•](?!…) \1\3 Esta expresión comprueba si al comienzo de un párrafo aparece cualquier carácter que no sea válido.

Ejemplo: <p>/Este tipo de inicio lo consideraría no válido.Quedando: <p>Este tipo de inicio ya sería

válido.Ejemplo: <p> En éste también habría una

detección. Quedando: <p>Éste también sería válido.

5.05 (\n\s{2}<p.+?(?<![,;:])</p>|[.*…!?][»)”\]]*(<[^>]*>)*</p>|(?<!p)>)\s*(<p[^>]*>)([—»«]*[¡¿]*(<[^>]+?>)*[¡¿«“(\[]*)\K(\p{Ll})(?![P)])

\U\6\E Esta expresión comprueba si la primera letra de comienzo de párrafo es un carácter en mayúsculas.

6 SIGNOS DE APERTURA Y CIERRE

Este grupo trata de localizar errores en aquellas frases que utilicen símbolos tales como interrogaciones, interjecciones, paréntesis o comillas y comprueban su correcta colocación y emparejamiento.

6.01 (?<!<p)\.?(?|(?<!["(])([!…?>][»”)]{1,2})|(?<![.(])([^\s.]\K[\pL\pN>»”])\.([»”)]{1,2})|(?<![>(\s])([^>.])([»”)]{1,2}))((?:<[^#>]+>){0,3})([^\n!…):;?,."]([^\p{Lu}h\s]{0,3}|[^oy.]{0,2}<[^>]+?>.{0,2}|(<a|sup).+</a>(</sup>)?(</p>)?)?(\p{Lu}(?!\p{Lu}|.\.)|\pN(?![.,:;-\pN])|(?=\n)))

\1\2.\3\4 Esta expresión localiza frases entre comillas angulares o entre paréntesis que terminando en interrogación o exclamación y continuando con mayúscula falta el punto final.También encuentran frases entrecomilladas o

entre paréntesis que tienen su punto final antes del respectivo cierre.

Ejemplo: Aquí tiene que efectuarse?» Una detección.Quedando: Aquí ya no tiene que

efectuarse?». Una detección.Ejemplo: Aquí tiene que efectuarse.» Una

detección.Quedando: Aquí ya no tiene que

efectuarse». Una detección.Ejemplo: Aquí tiene que efectuarse…» Una

detección.Quedando: Aquí ya no tiene que

efectuarse…». Una detección.

NOTA: RAE (Punto 3.1)

6.02 (^[^—\n]+?)\s(?!<em>|—)[^\s]+\K([-–]|[–—]\s)((?=\p{Ll}[^’-]{3}[^—\n]+$)) \1\3 Esta expresión localiza dos palabras iniciadas en minúscula y separadas por guiones y que en principio no se tratan de palabras compuestas.

Ejemplo: Éste es un caso con— creto que tiene que detectar.Quedando: Éste es un caso concreto que no

tiene que detectar.Ejemplo: Éste es otro ca-so en que debe

detenerse.Quedando Éste es otro caso en que ya no

debe detenerse.

NOTA: Detectará palabras compuestas válidas que por tanto no deben corregirse. Sin embargo no debe encontrar combinaciones del tipo Coca-Cola.

Las combinaciones ex-algo las detecta otra expresión.

6.03 (?|([?!])\s([¿¡]?(<[^>]+?>){1,2})|([?!](?:<[^>]+?>){0,2}[”»)]?)\s)([¿¡«“(]{0,2}\p{Ll}) \1, \2\4 Esta expresión localiza frases interrogativas o exclamativas contiguas entre las que no existe ningún signo de puntuación pero únicamente cuando la segunda frase comienza por minúscula.En estas condiciones debe existir una coma

separando ambas frases o bien debe seguirse de mayúscula. El reemplazo solo contempla la primera posibilidad.

Ejemplo: ¿Es esto un fallo? ¿verdad?Quedando: ¿Esto no es un fallo?, ¿verdad?

NOTA: RAE (Signos interrogación y exclamación 2f)

6.04 (?s)((?<!<)!|<body>)(?!!)[^¡!]+(?=(?<!\()!(?-s)(?!.*</em>)) No hay Esta expresión localiza frases entre interjecciones en las que existiendo el signo de cierre falta su apertura.

Page 9: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

6.05 (?s)((?<!<)\?(?!>)|<body>)(?!\?)[^¿?]+(?=\?(?-s)(?!.*</em>)) No hay Esta expresión localiza frases entre interrogaciones en las que existiendo el signo de cierre falta su apertura.

6.06 (?s)(?<!>)»[^»«]+?(?=(?<!>)») No hay Esta expresión localiza frases entre comillas angulares en las que existiendo el signo de cierre falta su apertura.

6.07 ¡(?!¡)[^¡!]+?(?=¡|</body>) No hay Esta expresión localiza frases entre interjecciones en las que existiendo el signo de apertura falta su cierre.

6.08 ¿(?!¿)[^¿\?]+?(?=¿|</body>) No hay Esta expresión localiza frases entre interrogaciones en las que existiendo el signo de apertura falta su cierre.

6.09 «[^«»]+?(?=«|</body>)|[^=]"[\pL\pN\.,:;](?!tt) No hay Esta expresión localiza frases entre comillas angulares en las que existiendo el signo de apertura falta su cierre.

6.10 ([(\[][^\])\n]+(?=$|[\[(])|^[^(\[\n]+?(?<!\s.|\s.{2}|>.</em>|>.{2}</em>|>.</strong>|>.{2}</strong>)(?<!º|\pN|>\p{Ll})[)\]])|(?<!\pN|[>\s]\p{Ll}|\*)[\])][^\[(\n]+?[\])]

No hay Esta expresión localiza frases entre paréntesis o corchetes en las que falta el respectivo símbolo de apertura o de cierre.

NOTA: Combinaciones anidadas de paréntesis y corchetes o viceversa pueden ser válidas.

6.11 (?|«[“¡¿]([^»”?!]+)\K(»)([”!?])|¡¿([^?!]+)\K(!)(\?)|¿¡([^?!]+)\K(\?)(!)|(¡)([«“])(?=([^»”!]+)![»”])|(¿)([«“])(?=([^»”?!]+)\?[»”])|“[¡¿]([^”?!]+)\K(”)([!?]))

\3\2\1 Esta expresión localiza frases entre interrogaciones, interjecciones, comillas angulares y comillas tipográficas en las que las posiciones de los signos de apertura no guardan relación de orden con los de cierre.

Ejemplo: ¿«frase entre signos?»Quedando: «¿frase entre signos?»Ejemplo: ¡¿frase entre signos!?Quedando: ¡¿frase entre signos?!

NOTA: La expresión tiene en cuenta si debe permutar los signos de apertura o los de cierre.

7 <ETIQUETAS>

Este grupo intenta localizar errores relacionados con la mala colocación de las etiquetas de énfasis o resalto respecto de los signos de puntuación.

7.01 Etiquetas a clases de párrafo

Este subgrupo de tres búsquedas realiza la sustitución de las etiquetas que afectan a la totalidad de un párrafo por la clase correspondiente aplicada en él.

7.011 <p(?:(\s)class="([^"]*)")?><em>([^/]+(?![\pL\s]+)((?=/[FITabs]).+|))</em>(?=[.…]?</p>) <p class="\2\1cursiva">\3

Esta expresión busca párrafos, con o sin clases definidas, en los que la totalidad de su texto viene abarcada por las etiquetas <em>, con el fin de eliminarlas e incluir la clase "cursiva" como clase del párrafo acompañando a las posibles existentes.

Ejemplo: <p><em>Parrafo enfatizado.</em></p>

Quedando: <p class="cursiva">Parrafo enfatizado.</p>

7.012 <p(?:(\s)class="([^"]*)")?><small>([^/]+(?![\pL\s]+)((?=/[FITabs]).+|))</small>(?=[.…]?</p>) <p class="\2\1versalita">\3

Esta expresión busca párrafos, con o sin clases definidas, en los que la totalidad de su texto viene abarcada por las etiquetas <small>, con el fin de eliminarlas e incluir la clase "versalita" como clase del párrafo acompañando a las posibles existentes.

Ejemplo: <p><small>Parrafo en versalitas.</small></p>

Quedando: <p class="versalita">Parrafo en versalitas.</p>

7.013 <p(?:(\s)class="([^"]*)")?><strong>([^/]+(?![\pL\s]+)((?=/[FITabs]).+|))</strong>(?=[.…]?</p>) <p class="\2\1negrita">\3

Esta expresión busca párrafos, con o sin clases definidas, en los que la totalidad de su texto viene abarcada por las etiquetas <strong>, con el fin de eliminarlas e incluir la clase "negrita" como clase del párrafo acompañando a las posibles existentes.

Ejemplo: <p><strong>Parrafo resaltado.</strong></p>

Quedando: <p class="negrita">Parrafo resaltado.</p>

7.02 </?[^<lpdau]{1,6}>((?!do|re|m[ií]|fa|sol|la|s[ií]|t[uú]|un|\d{1,2})[^\p{Lu})(|\[:]{0,2})</?[^</lpdahu]{1,6}(\sclass.+?")?> \1 Esta expresión está pensada para cuando al escanear texto el escáner coloca entre etiquetas de 0 a 2 caracteres.También detectará casos en los que las

etiquetas se abren y cierran consecutivamente de forma innecesaria.

Ejemplo: <em></em>Quedando: eliminaría las etiquetasEjemplo: <em>a</em>Quedando: aEjemplo: <em>Este enfatizado</em>

<em>debiera ser único</em>Quedando: <em>Este enfatizado debiera ser

único</em>

NOTA: En ocasiones las detecciones no se tratan de errores sino de enfatizaciones de palabras cortas y por tanto válidas.

7.03 (?|<(?:em|strong)>[^¡¿][^\[(/\n]+?\K(?<![;\s]..|\..\.|\..|[;\s].|\d|\d\pL)([.,:;”»)]?\pP)(</(em|strong)>)(?!\|)|((?<=>)<[^pa>]+>)(—)|(</[^>]+>)(’s))

\2\1 Esta expresión permite localizar signos finales de puntuación dentro de un texto delimitado por las etiquetas de enfatizado o negrita, permitiendo al revisor extraerlos fuera de las mencionadas etiquetas.

Ejemplo: ¡Éste sería un posible <strong>caso!</strong>Quedando: ¡Éste sería un posible

<strong>caso</strong>!Ejemplo: Éste sería otro «<em>caso»</em>

posibleQuedando: Éste sería otro «<em>caso</em>»

posible

Page 10: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

7.04 (<[^pl>]+>)([«\[(“])((?!N\.|Nota de)[^(/\n»]+?)((?<!\.\s.\.)[”)\]»])(</[^p>]+>) \2\1\3\5\4 Esta expresión encuentra frases entre etiquetas y a su vez entre comillas o paréntesis o corchetes, extrayendo del énfasis o resalto los símbolos de las comillas, corchetes o paréntesis.

Ejemplo: <strong>«Éste sería un posible caso»</strong>Quedando: «<strong>Éste sería un posible

caso</strong>»Ejemplo: Éste sería otro <em>«caso»</em>

posibleQuedando: Éste sería otro «<em>caso</em>»

posible

7.05 (?<![«¡¿“(])(<[^hp>]+>)([«¡¿“(]+)(?!N\.|Nota de)(?=[^\n)<]+</[^>]+>[»!?”)]) \2\1 Esta expresión está relacionada con la anterior y su comportamiento depende la decisión tomada en ella.Su objetivo es localizar signos iniciales de

puntuación dentro de un texto delimitado por etiquetas de enfatizado o negrita, permitiendo al revisor extraerlos fuera de las mencionadas etiquetas. La detección sólo se produce si el signo de cierre está fuera de la correspondiente etiqueta.

Ejemplo: <strong>¡Éste sería un posible caso</strong>!Quedando: ¡<strong>Éste sería un posible

caso</strong>!Ejemplo: Éste sería otro <em>«caso</em>»

posibleQuedando: Éste sería otro «<em>caso</em>»

posible

7.06 (?|([\pL\pN][.,;:—?!»”)…]{0,2})(\pP{0,3}(?<!&nbsp;)<[^/<au]+?>)|(?<!>\p{Lu}|/>)(</[^<]+?>(?![—,.:;]?&)[?!»”)]{0,2}[.,;:—…]{0,2})(\pP{0,3}[\pL\pN](?!<su|\d?</span)))

\1 \2 Esta expresión sirve para localiza palabras entre etiquetas sin espacio previo o posterior a ellas y por tanto unidas a otras palabras.

Ejemplo: En este caso<em>concreto</em> tiene que parar.Quedando: En este caso <em>concreto</em>

tiene que parar.

7.07 [\pL\pN>)»”]\K(—?[.,;:…!?»”)\]])\s?(<(a|s)[^\n,]+?[^;]</a>(</sup>)?(?![.,;:…!?»”)\]])?) \2\1 Esta expresión tiene como cometido localizar y corregir las posiciones de las llamadas a las notas de un libro manteniendo el criterio de situarlas antes de los signos de puntuación.

Ejemplo: Texto de <em>nota</em>.<llamada a nota>Quedando: Texto de <em>nota</em><llamada

a nota>.

NOTA: RAE (Comillas 3.c)

8 ORTOGRAFÍA, ACENTUACIÓN, TIPOGRAFÍAS

En este grupo he incluído como ayuda una serie de búsquedas que tienen por objeto unificar una serie de criterios ortográficos y tipográficos a lo largo del libro.Las nuevas normas gramaticales han producido modificaciones en algunos aspectos con raigambre por lo

que en algunos textos los encontramos de una manera y en otros de otra.Mediante ellas el revisor podrá adecuarlas en función de cómo hayan sido incluidas en su texto al objeto de

mantener el mismo criterio.Igualmente se facilita el enfatizado y desenfatizado de una serie de extranjerismos, tratamientos personales y

latinismos en concordancia con lo recomendado por la RAE.

8.01 Quitar tilde: RAE posterior a 2010

Las cinco expresiones que se incluyen en este subgrupo tienen por finalidad localizar los pronombres demostrativos y los monosílabos acabados en «iáis», «iéis», «ié» e «ió» con el fin de eliminar la tilde en ellos.

8.011 (\PL\K)É((st?([ae]s?|os))) \1E\2 Esta búsqueda tiene por objeto unificar el criterio de acentuación de los pronombres demostrativos. Si en el libro hay algunos acentuados pero no todos, esta búsqueda localizará «Ésta» «Éste» «Éstas» «Ésa» «Ésas» y «Ése» con el fin de eliminar la tilde.

NOTA: Como toda expresión que trabaja con grupos de palabras, es posible que no realice detecciones de los verbos que acompaña por no estar éstos dentro de los incluidos en la expresión.

8.012 (?|(?i)(\PL\KAqu)é(l(l(as?|os))?)|(?-i)(\PL\K)é((st?([ae]s?|os)))) \1e\2 Esta búsqueda es similar a la anterior pero circunscrita a «Aquél», «Aquéllos», «Aquéllas» y los pronombres de la expresión 9.03 cuando aparecen en minúscula.

NOTA: Como toda expresión que trabaja con grupos de palabras, es posible que no realice detecciones de los verbos que acompaña por no estar éstos dentro de los incluidos en la expresión.

8.013 (?i)\PL(?![ao])\pL{1,2}i\Ká(?=is\PL) a Esta búsqueda localiza los monosílabos acabados en «iáis» con el fin de sustituirlos a criterio del revisor por sus equivalentes sin acento.

8.014 (?i)(?<=\PL)((([fglp]|cr)u?i?)|\pLi)\Ké(?=(is)?\PL) e Esta búsqueda es similar a la anterior para las palabras «guié», «lié», «pié», «fié» y «crié».

8.015 (?i)(?<=\PL)(([dflprv]|[cf]r|gu)i)\Kó(?=\PL) o Esta búsqueda localiza «dió», «fió», «lió», «pió», «rió», «vió» «frió», «crió» y «guió», con el fin de sustituirlas a criterio del revisor por sus equivalentes sin acento.

8.02 Poner tilde: RAE anterior a 2010

Las cinco expresiones que se incluyen en este subgrupo tienen por finalidad localizar los pronombres demostrativos y los monosílabos acabados en «iais», «ieis», «ie» e «io» con el fin de acentuarlos gráficamente.

8.021 (?<![Aa]l|ala|costa|dirección|[Ee]l|entrada|lado|límite|orientación|orilla|parte|sentido)(\PL\K)E((st?(as?|e|os))(?=\s?[.,:;!?»”…—)]|(<.+?"?>)?\s(al?|(acce|po)dían?|antes?|apenas|aún|con|cuy[ao]|de(?=\sl[ao]s?)|desde|[df]ijo|e[lns]?|e(ran?|stá)|fue(r[ao]n?)?|fundamental(es)?|h(acen?|an?|izo)|l[aeo]s?|[lmsv]ea|[lmst]el?|más|n[io]s?|nunca|[ouy](?!\s(aqu[eé]l|[eé]st?[aeo]s?|otr[ao]s?))|para|por|que(?=\s\S+[aei]r\PL)|qui[eé]n|s[iíoóu](lo)?n?|siempre|solían?|tan|un|v[ai]?|ya|\S*([ai]ban?|[aer]rá|[ae](r[ao]n|san)|(?<!atu|rem|tru)[ae]ndo|(?<!ca|dia|[fgt]o|iro|[mr]a)[bn](ía|ié)[ns]?|[^f]ecían?|garan?|[^gq]

\1É\2 Esta búsqueda tiene por objeto unificar el criterio de acentuación de los pronombres demostrativos. Si en el libro hay algunos acentuados pero no todos, esta búsqueda

Page 11: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

((?<!f)i|u)e(ra|se)n?|\S[lr]aran?|ó|(?<!ar|q|\s|\sg)[dptu]ían?|rrían?|(?<![egnt]|ad|br|ci|ech|id|gal|ja|jad|mis|ped|sos|ub)[^f][rv]ían?|uvo|(?<![eo]f|nm|p)(e[bn](e|sa)|(?<!nd)ice|lleva|ñala|uele)n?))[!?,:;.»”)—\]…\s]))

localizará «Esta» «Este» «Estas» «Esa» «Esas» y «Ese» con el fin de acentuarlos gráficamente.

NOTA: Como toda expresión que trabaja con grupos de palabras, es posible que no realice detecciones de los verbos que acompaña por no estar éstos dentro de los incluidos en la expresión.

8.022 (?|(?i)(?:(?<![\PLd]el)\s\S*|\pP)(\PL\KAqu)e(l(l(as?|os))?)|(?:(?<![\PLd]el)\s\S*(?<!al|la|costa|dirección|el|entrada|lado|límite|oeste\sa|orientación|orilla|parte|sentido)|\pP)(?-i)(\PL\K)e((st?(as?|e|os))))(?=(\s[—\[(])|[.,:;!?»”—)]|…\s\p{Lu}|(<.+?"?>)?\s(al?(?!\soeste)|(acce|po)dían?|antes?|apenas|aún|con|cuy[ao]|de(?=\sl[ao]s?)|desde|[df]ijo|e[lns]?|e(ran?|stá)|fue(r[ao]n?)?|fundamental(es)?|h(acen?|an?|izo)|l[aeo]s?|[lmsv]ea|[lmst]el?|más|n[io]s?|nunca|[ouy](?!\s(aqu[eé]l|[eé]st?[aeo]s?|otr[ao]s?))|para|por|que(?=\s\S+[aei]r\PL)|qui[eé]n|s[iíoóu](lo)?n?|siempre|solían?|tan|un|v[ai]?|ya|\S*([ai]ban?|[aer]rá|[ae](r[ao]n|san)|(?<!atu|rem|tru)[ae]ndo|(?<!ca|dia|[fgt]o|iro|[mr]a)[bn](ía|ié)[ns]?|[^f]ecían?|garan?|[^gq]((?<!f)i|u)e(ra|se)n?|\S[lr]aran?|ó|(?<!ar|q|\s|\sg)[dptu]ían?|rrían?|(?<![egnt]|ad|br|ci|ech|id|gal|ja|jad|mis|nic|ped|sos|ub)[^f][rv]ían?|uvo|(?<![eo]f|nm|p)(e[bn](e|sa)|(?<!nd)ice|lleva|ñala|uele)n?))[!?,:;.»”)—\]…\s])

\1é\2 Esta búsqueda es similar a la anterior pero circunscrita a «Aquel», «Aquellos», «Aquellas» y los pronombres de la expresión 9.01 cuando aparecen en minúscula.

NOTA: Como toda expresión que trabaja con grupos de palabras, es posible que no realice detecciones de los verbos que acompaña por no estar éstos dentro de los incluidos en la expresión.

8.023 (?i)\pLi\Ka(?=is\PL) á Esta búsqueda localiza los monosílabos acabados en «iais» con el fin de sustituirlos a criterio del revisor por sus equivalentes con acento.

8.024 (?i)(?<=\PL)(([fgl]|cr)u?i)\Ke(?=\PL)|\pLi\Ke(?=is\PL) é Esta búsqueda es similar a la anterior para las palabras «guie», «lie», «fie» y «crie» y sus plurales.

8.025 (?i)(?<=\PL)(([flpr]|[cf]r|gu)i)\Ko(?=\PL) ó Esta búsqueda localiza «fio», «lio», «pio», «rio», «frio», «crio» y «guio», con el fin de sustituirlas a criterio del revisor por sus equivalentes con acento.

8.03 Enfatizados

Este grupo de expresiones detecta palabras comunes que deben enfatizarse siguiendo las recomendaciones de la RAE y el desenfatizado de términos latinos adaptados al español.

8.031 (?i)(?<!m>|ep">|\pL)((baby(-sitter)?|best-?seller|bourbon|bri(dge|oche)|cabaret|chantilly|chiffon|compact disc|cr[ai]ck(et)?|croquet|(mini)?croissant|dandy|drugstore|dry|(e-)?mail|express|fast-food|ferrie|ghetto|graffiti|hacke?a?(do)?r?|(?-i)jean(?!-|\s\p{Lu})|jeep|(?i)jockey|loft|lounge|lunch|music-?hall|(?-i)nick|(?i)nightclub|pack|parking|pendrive|p[íi]cnic|piercing|pin-up|ping-pong|p[ií]tcher|(pon|troll)e?y|post(-it)?(?!\smórtem)|premium|pub|puenting|self-service|reset([^\s\pP]+?)?|rock(’n| and) roll|round|(?-i)(boy )?scout|(?i)sex-shop|sho(ck|rt)|snob|snuff|spam|speaker|standing|stripper|swing|tempura|toilette|trench|tweed|voyeur|walkman|wifi|zap?ping|zoom|((brand|cook|countr|hipp|hobb|pant|whisk)(y(?!s)|ie)))(s|))(?!</(e|sp)|\pL)

<em>\1</em> Esta expresión localiza extranjerismos que aparecen con frecuencia en los textos, permitiendo su enfatizado de forma automática.

8.032 (?i)(?<!m>|\pL)(a\s(posteriori|priori)|ad hoc|alter ego|de facto|ex\s(aequo|professo)|grosso modo|habeas corpus|honoris causa|in\s(albis|crescendo|extremis|fraganti|situ|vitro)|ipso facto|modus\s(operandi|vivendi)|motu proprio|post mortem|quorum|sine die|statu quo|sine qua non|sub [ij]udice|sui generis|summum|via crucis|vox populi)(?!</(e|sp)|\pL)

<em>\1</em> Esta expresión localiza latinismos que aparecen con frecuencia en los textos, permitiendo su enfatizado de forma automática.

NOTA: RAE (Latinismos)

8.033 (?i)<em>(álter ego|ex profeso|hábeas corpus|post mórtem|quórum|sub júdice|sui géneris|súmmum|vía crucis|vox pópuli)</em>

\1 Esta expresión localiza latinismos adaptados al español y que pueden aparecer enfatizados en los textos, permitiendo eliminar su enfatizado de forma automática.

NOTA: RAE (Latinismos)

8.034 (?i)(?<!m>|\pL)((baronet|fr[aä]u(lein)?|herr|m(a|es)dame|m(es|o)nsieur|mademoiselle|miss|pater|rabbi|sahib|sha|sir|((mi)?lad)(y(?!s)|ie))(s|))(?!</e|[\pL-])

<em>\1</em> Esta expresión localiza tratamientos personales que aparecen con frecuencia en los textos, permitiendo su enfatizado de forma automática.

8.04 (?i)((?<!ni\s)\PL\Kaun(?!\s(antes|aqu[eé]l|así|cuando|después|si|(\S+?[ae])ndo|en|sin))|adonde(?!\s(él|\S*(aban?|eran?|ían?)))|\PL\K(cuan(ta)?|mas(?!\slos?)))(?=\PL)

No hay Esta búsqueda pretende la localización de palabras frecuentes que pueden darse con o sin tilde.En concreto intenta localizar aquéllas que

debieran llevarla y no lo hacen.

8.05 \PL\K(?i)el(?=[.,:;?!)\]—»]|…\s\p{Lu}|(<[^>]+>)|\s[¡¿«(“]?(<[^>]+>)?((casi|mismo|no)\s)?(abre|aún|casi|[cf]?[lpr]?(gu)?io|[cgpt][io][md][ae]|dij?n?z?o|es?t?(ra)?á?|fue|[hvy]a|hacia|hizo|i[br][áa]|jamás|l[aeo]s?|[ms]e|nada|n?(os)?i?(?!\.º)|p(one|udo)|[ouy]|sí|\S+((?<!cap|domin|plat)i?s?ó|uvo|enas|m(bién|poco)|[aei](ba|rá)|(?<!env|cól|ort|\sc|\sp|w)[aep](r[ae]|se)|(?<!anv|\sgu|ig|iod|lic|sp|[«\s]d)ía|(?<!c[ar]|[rs]a)un?[cdy]e))[\s.,:;…¡¿?!)\]—»])

No hay Esta expresión intenta localizar «el» o «El» cuando actúan en forma de pronombre. Las detecciones se reducen a una serie de posibilidades corrientes pero no abarcan su totalidad.

NOTA: Como toda expresión que trabaja con grupos de palabras, es posible que o bien no realice detecciones de los verbos que acompaña o detecte como errores casos que no lo son.NOTA: Si el número de coincidencias es

elevado puede usarse como reemplazo Él o él según la capitalización deseada.

8.06 \PL(?i)t\Ku(?=[.,:;?!)\]—»]|(<[^>]+>)|\s[¡¿«(“]?(<[^>]+>)?((casi|mismo|no|siempre)\s)?(dij?n?z?iste|[hvy]a?s?|sí|(fu|hic)iste|aún|i[br][áa]s|[mt]e|n?(os)?i?|l[aeo]s?|p(one|uede)s|[cgpt][io][md][ae]s|es?t?(ra)?á?s|[^\s\p{Lu}]{2,}((?<![éiíú]|dio|mie|ño|uma)s|i?s?abas|uviste|enas|m(bién|poco)|[aei](ba|rá)s|[aep](r[ae]|se)s|(?<!lic|sp|anv|ig|iod|\sgu)ías))[\s.,:;…¡¿?!)\]—»])

ú Esta expresión localiza el pronombre «tu» sin tildar para reemplazarlo por el pronombre tildado.

8.07 (?i)D[áé][lmst]e(?=\PL) No hay Esta expresión encuentra formas acentuadas llanas de imperativos frecuentes del verbo «dar» que no deben ir tildadas.

8.08 \PL\K(anti|auto(?!\s(con|de))|co|ex|intra|neo|pluri|pos|pr[eo]|p?seudo|semi|s[uú]p(er|ra)|vice)(\s(?!\p{Lu}|del?\PL|[oy]\s|profeso\PL|que)|-(?![\p{Lu}\pN]))

\1 Esta expresión localiza distintos tipos de prefijos separados de la base a la que se anteponen con el fin de unirlos a ella.

NOTA: RAE (Prefijos)

9 BÚSQUEDAS VARIAS

Dentro de este grupo heterogéneo se encuentran una serie de expresiones no incluidas en los anteriores por no ajustarse a las características de cada grupo.

9.01 (?i)[¡¿]\K(cuan.o\s(?!vaya)|como(?!\s(a|antes?|cuál(es)?|cu[aá]ndo|e[ln]|est?[ae]s?|hoy|(l[ao]s?)\sque|mi|[nv]uestr[ao]s?|para|por|qu(é|ién)|sea|s[iu]s?|todos?|usted(es)?|yo))|cual|([^\n!?]+?)?(((?<!aba|allí|arse|lugar|qué)\s)?\K\ba?donde(?!\s(e[ln]|antes|estén|ha(st|y)a|m[ái]s|muchos?|n[io]|quede|[st][uú]|tod[ao]|una|usted(es)?|\S*(amos|ayas?|[duv]iera[ns]?|é(ra|se)mos|ueda[ns]?)))|((?<!\PLa|él|es|hay|\PLyo)\s)\Kquien(?!\s(el(la)?|no|quiera|sea|tant[ao]s?|un[ao]?|\S*(ara[ns]?|iera[sn]?|i(ga|re)))))|que(?!\s([lms][ei]\s)?(\p{Lu}|alg[úu](ie)?n[ao]?s?|apenas|aqu[eé]l(la)?|a?s[ií]|cada|cómo|con|de|dónde|Dios|[eé]l(la)?|entr[ae]|[eé]st?[aeo]s?|hasta|[hv]ay[^?]|hoy|iba|l[ao]s?\PL|nadie|no|[nv]uestros?|por|pueda|quién(es)?|san|sólo|son?(is)?|tod[ao]s?|t[uú]|una?|y[ao]|\S*([ae]l?te[ns]?|(an|e)cen?|(al|[in]|ha)g[aá]i?[ns]?|[bdnrt]ara[ns]?|dure[ns]?|ep?an?|ee|íe|elva[ns]?|o(jan?|ne)|rne[ns]?|st[eé]n?|(?<!p)ue[drsv][ae][ns]?)|[^!?]*qué)))(?![\pL;,])

No hay Esta expresión es una utilidad que permite encontrar palabras entre interrogaciones o exclamaciones que comenzando por alguna partícula interrogativa debieran llevar tilde.

9.02 (?i)(\PL\K(pero|mas)),(\s[¿¡]) \2\3 Esta expresión busca el patrón formado por «pero» o «mas» seguido de una oración interrogativa o exclamativa y separadas por

Page 12: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

una coma, con el fin de eliminarla.

Ejemplo: pero, ¿qué me dices?Quedando: pero ¿qué me dices?

NOTA: RAE (Comas: usos incorrectos 3.3)

9.03 (?i)(?|([\pNn])(º|ª|<sup>er)|(N)\.o) \1.\2 Esta expresión localiza números ordinales con letra volada en los que falta el punto de abreviatura entre dicho número y la letra volada.

Ejemplo: 1ªQuedando: 1.ª

NOTA: RAE (Abreviaturas 6d)

9.04 ([^\pL\pN])\K((\pL|\pN){1,})(\s|<.{1,7}>\s<.{1,7}>)(?<!0{3}\PL)\2(?=[^\pL\pN-]) \1\2…\4\2 Esta expresión permite localizar dos palabras iguales contiguas.Además de la posibilidad de que se trate de un

error puede darse el caso de que entre ambas palabras deban existir puntos suspensivos.El reemplazo se establece para este último

caso.

9.05 (?i)\PL\Kh(?=(e|as?)\s(?!lugar|(medio )?[\pL<>«“]*([aií]?do|[ilors]to|cho|e|hí|qu[éí]|ll[áí]|cá)\PL)) No hay Con esta expresión se intenta localizar frases que comienzan por «ha», «has» o «he» y no son seguidas por verbos acabados en los finales de participio más corrientes.En estas circunstancias «ha», «has» y «he»

probablemente se traten de errores y se refieran a «la», «las» o «le».También la expresión puede servir para

detectar fallos de concordancia.

Ejemplo: ha puertaEjemplo: he dijoEjemplo: he dicha

NOTA: Como toda expresión que trabaja con grupos de palabras, es posible que o bien no realice detecciones de los participios no incluidos o detecte errores que no lo son del tipo «no ha lugar».

9.06 (?i)(?(?=vi[^i]|[clv]?i?d|[cm]m|[dm]i|clic|lcd|(m|ci)?v?il|[mdcl][<.,…\s)\]”»]) |(?<=siglo\s|siglos\s|año\s|años\s|\P{Lu}{8}(?<!rayos)\s|\PL[oóy]\s|[,;]\s|del\s|al\s|«)([mdclxvi]+(?:-[mdclxvi]+)?)(?=[\s<)»?!,.;:&…—]([^&\pN\p{Lu}\s]|\s(<[^>]+>)?(\pP{0,2}?\pL+?[.,;]?[<\s]|[&\pN])))(?!<small))

<small>\U\2\E</small> Localiza números de cifras romanos que se encuentren en minúsculas o mayúsculas y los transforma en mayúsculas versalitas.

NOTA: La búsqueda no detecta el número «VI» por coincidencia con el pasado de «ver», para la comprobación de este ordinal es necesario usar la expresión 8.06a. La expresión tiene en cuenta la existencia de nombres propios previos al ordinal romano pero sólo en una profundidad de 8 caracteres.NOTA: RAE (Uso de los números romanos

3.1a)

9.06a (?i)(?(?=[clv]?i?d|[cm]m|[dm]i|clic|lcd|(m|ci)?v?il|[mdcl][<.,…\s)\]”»]) |(?<=siglo\s|siglos\s|año\s|años\s|\P{Lu}{8}(?<!rayos)\s|\PL[oóy]\s|[,;]\s|del\s|al\s|«)([mdclxvi]+(?:-[mdclxvi]+)?)(?=[\s<)»?!,.;:&…—]([^&\pN\p{Lu}\s]|\s(<[^>]+>)?(\pP{0,2}?\pL+?[.,;]?[<\s]|[&\pN])))(?!<small))

<small>\U\2\E</small> Esta expresión es totalmente análoga a la anterior pero añade la localización de «VI», en este caso será el corrector el que determine la necesidad o no del reemplazo.

9.07 (?i)(°|(?<=\PL)(anos?|calibre\d+|(cu|gua)ndo|dientas?|[ds]o(?!\s(pena|pretexto)|-)|loa|muías?|n[o.]?\s(?=\pN)|píes?|por que|pulpito|(?<!con\s|decisiones\s|medida\s|muy\s|son\s)sabias?(?!\spalabra)|sgc-|(?<=el|un )sota|[tv]enias?|(?-i)Osear)(?=\PL)|(?<!;)&[^#a][^b;]+?;(?!&)|<br />)

No hay Esta expresión localiza errores simples y frecuentes que no se han incluido en alguna de las búsquedas precedentes.Los resultados son válidos en algunas

ocasiones por lo que se deberán comprobar una a una las coincidencias.

Términos buscados:

ano/s cundo dienta/s do guando

loa muía/s osear píe/s por que

pulpito sabia/s so sota tenia/s

venia/s

<br /> etiquetas &

grados °

N. 12 n.o 25

sgc-

B. GRUPO DE EXPRESIONES PARA COMPATIBILIDAD DE DISPOSITIVOS

Este grupo B tiene por finalidad proporcionar compatibilidad de la estructura del texto en el mayor número posible de lectores electrónicos. No se trata por lo tanto de expresiones que corrijan errores sino que intentan evitar comportamientos extraños de los lectores en el manejo que hacen del ePub. Estos comportamientos no se dan en todos los modelos pero la inclusión de las soluciones propuestas con estas RegEx posibilitan que no se produzcan en otros. Su empleo es opcional aunque conveniente.

Nº BÚSQUEDA REEMPLAZO USO

B.01 (?|<p>|<p( )class="((?!extenso).+)">)(.{4000,}</p>) <p class="extenso\1\2">\3 Permite la localización de párrafos de más de 4000 caracteres y les aplica una clase ‘extenso’ que está definida en el CSS.

Con esta expresión se intenta solucionar el comportamiento de determinados lectores que cuando se encuentran con un párrafo extenso (ligeramente por encima de los cuatro mil caracteres) dividen de forma aleatoria el párrafo y lo colocan al principio de la siguiente página, dejando por lo tanto un espacio en blanco en la anterior.

B.02 (?<!\pL)(\pL)\1?\.\K\s(?=(\pL)\2?\.(?!</sp)) &nbsp; Esta expresión localiza abreviaturas separadas por un espacio en blanco que queda sustituido por la etiqueta HTML &nbsp;

Ejemplo: a. C.Quedando: a.&nbsp;C.

Page 13: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

Con esta expresión se corrige la posibilidad de que los lectores separen en líneas diferentes la abreviatura si se encuentra al final de una línea. Aunque la etiqueta realiza la misma separación que un espacio en blanco, a efectos de los lectores es un espacio no divisible, por lo que siempre mantiene agrupado el conjunto.

NOTA: Previo al empleo de esta expresión es aconsejable realizar un recuento del número de coincidencias y decidir al respecto. Esta expresión es aconsejable en libros con un número importante de abreviaturas. La expresión B.03 es capaz de detectar la mayor parte de las situaciones en las que puede dividirse un texto en dos líneas, incluidas las abreviaturas, pero introduce más cantidad de texto en su solución por emplear la etiqueta <span> seguida de la clase 'nosep'. La expresión B.02, si bien no es tan completa como la señalada B.03, reduce el número de caracteres en la situación mencionada de un número elevado de abreviaturas.

B.03 (?|(?<![\pL-]|[p"b]>|[p"b]><em>|[p"b]><strong>|p">\()\K(\p{Lu}<[^/>]+?>\S+?</s[^>]+>(?!-|\pL|\pN))|[^\pL>]\K(<big>\p{Lu}[^>]+?>[^<\s]+)(?=\PL)|\PL\K([«“]?((\pL)\3?\.\s)+(\pL)\4?\.[»”]?)(?!\s\pL\.)|\PL\K((\p{Lu}\s)+\p{Lu}(?!\s\p{Lu}|\pL))|(\p{Sc}?((?<!ep">)\pN{1,3}\s([×x]\s)?)+\pN+(\s(\pL{1,2}\.|\p{Sc}))?(?!\s?(\pN|\pL{1,2}\.|\p{Sc})))|\PL\K((?:\p{Lu}.{1,2}\.\s)?[^—>\s’]+’[\pL-]+(?!\pL))|\s\K(\(?\pL(<[^>]+>)?[^\s’\pP"/=]{3,}(<[^>]+>)?\s(<[^e>]+>)?[IVXLCM]+\)?(<[^u>]+>)?(?=(?<!</p>|</h.>)[\s.,:;»\)…!?]|</(h.|p)>))|[^/\pL-\pN]\K(\(?[\pL,\pN]{1,4}[:-][^<-\s\pP]{1,4}\)?([-,]\pN{1,4})?)(?=[.,:;?!…»”—\s](?!\pN)|</)|\PL(\p{Lu}{1,2}(<.+b>)?(-\p{Lu}{1,4}(<.+b>)?)+)(?![\pL<\pN-]))(?!(</[^>]+>)?[”»]?</span>)

<span class="nosep">\1</span> Esta expresión trata de manera única las abreviaturas recogidas en la expresión B.02 junto con otros casos especiales como etiquetas <small> o <big>, clase "versalita", fechas, números o palabras compuestas cortas separadas por el guión -, fórmulas químicas, palabras con apóstrofo...

En todos estos casos la expresión inserta la clase 'nosep' mediante la etiqueta <span>.

Ejemplo: P<small>RUEBA</small>Quedando: <span class="nosep">P<small>RUEBA</small>

</span>Ejemplo: 11-12-2013Quedando: <span class="nosep">11-12-2013</span>Ejemplo: <em>e-mail</em>Quedando: <em><span class="nosep">e-mail</span></em>Ejemplo: P. D.Quedando: <span class="nosep">P. D.</span>Ejemplo: K-47Quedando: <span class="nosep">K-47</span> NOTA: Previo al empleo de esta expresión es aconsejable realizar

un recuento del número de coincidencias y decidir al respecto. Coincidencias al inicio de línea no se dividirán por lo que no tiene por qué emplearse esta solución.

El uso tanto de B.02 como de B.03 queda a criterio del corrector en la idea de hacer un uso de ellas ajustado a lo que se pretende.

B.04 (?<!\pL|[p"]>)\K(\p{Lu})<(?:[^/>]+?)>(\S+)\s([^<]+)</s[^g>]+> <span class="nosep">\1<small>\2</small></span> <small>\3</small>

Esta expresión localiza frases de más de una palabra en mayúsculas sobre las que se ha aplicado la clase 'versalita' o la etiqueta <small> a partir de la segunda letra de la primera palabra, con el fin de aplicarles la clase 'nosep', que está definida en el CSS, que evita el comportamiento erróneo de algunos lectores que dividen el texto por la segunda letra que lo forma.

Ejemplo: P<span class="versalita">RUEBA MÚLTIPLE</span>Quedando: <span class="nosep">P<small>RUEBA</small>

</span> <small>MÚLTIPLE</small>Ejemplo: P<small>RUEBA MÚLTIPLE</small>Quedando: <span class="nosep">P<small>RUEBA</small>

</span> <small>MÚLTIPLE</small>

B.05 [^#-\s:,.;&</>"\x{200B}]{25,} No hay Esta expresión localiza palabras con al menos veinticinco caracteres a las que puede ser necesario aplicar una propiedad que haga que se dividan adecuadamente en uno o varios hipotéticos saltos de línea.

El reemplazo que se propone no es tal sino la forma más compatible y que mejores resultados ha dado en la división silábica de la palabra a tratar, que es el uso de la etiqueta &#8203;

La idea es su introducción manual al final de cada una de las sílabas que formen la palabra. Si esta palabra no tiene un sentido literario, la introducción de la etiqueta puede hacerse en cualquier parte de ella.

C. EXPRESIONES PARA AYUDAS A LA MAQUETACIÓN

Este grupo C tiene por finalidad ayudar al editor en tareas propias de la maquetación de textos que conlleven la sustitución o búsqueda masiva o la aplicación de clases especiales definidas en la hoja CSS. Al igual que el grupo B NO REALIZAN correcciones ni detectan errores.

Nº BÚSQUEDA REEMPLAZO USO

C.01 (?i)(?<!m>|\pL)((texto)(s|))(?!</e|\pL|-) <em>\1</em> Esta expresión realiza el enfatizado de todas las palabras que coincidan con «texto» estén o no en mayúsculas o minúsculas evitando el anidamiento recursivo del enfatizado.

Ejemplo: monsieurQuedando: <em>monsieur</em>

C.02 <em>(.+?)</em> \1 Esta expresión elimina el enfatizado de todo aquello que se encuentre entre las etiquetas de énfasis, se trate de una sola palabra, de un grupo de ellas o de párrafos completos.

El reemplazo debe hacerse de uno en uno en función de si se desea o no eliminar cada caso.

C.03 (?|(<h.+\n{1,3}\s{1,7}(|<p.+subt.+?">.+\n\s{1,7})))<p>

\1 <p class="asangre"> Esta expresión permite modificar la etiqueta <p> del primer párrafo cuando queremos que incluya la clase 'asangre'. Tiene en cuenta la posibilidad de un subtítulo previo definido por una clase que empiece al menos por subt

Ejemplo: <h3 id="heading_id_2">1</h3> <p>Aquí empieza el

párrafoQuedando: <h3

id="heading_id_2">1</h3> <p

class="asangre">Aquí empieza el párrafoEjemplo: <h3>1</h3> <p class=”subtit”>Aquí

va el subtítulo <p>Aquí empieza el

Page 14: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

párrafoQuedando: <h3>1</h3> <p class=”subtit”>Aquí

va el subtítulo <p

class=”asangre”>Aquí empieza el párrafo Si la clase para el subtítulo no

empieza por subt será necesario modificar la expresión con el nombre que corresponda.

C.04 (?(?=<.+(asangre|centrado|cita|derecha).+>) |(?:<p class=")\K(?:([^>]+?)(\s)?)?(\bsalto(?:25|inicio)\b)(\s)?(([^>]+?)?)(?="))

\4 asangre\3\2\5\6 Esta expresión permite añadir la clase 'asangre' en los saltos de escena definidos mediante 'salto25' o 'saltoinicio' vayan o no acompañados de otras clases.

Ejemplo: <p class="cursiva salto25 negrita">PárrafoQuedando: <p class="salto25

asangre cursiva negrita">Párrafo

NOTA: Tras el reemplazo siempre aparece en primer lugar el salto seguido de 'asangre' y el resto de clases que incluyese.

C.05 (<p>(&nbsp;|(|&nbsp;)<br />)</p>\n{1,3}\s{1,7})+<p>

<p class="salto25 asangre"> Esta expresión sirve para eliminar los saltos de escena que se realizan sin una clase 'salto25' remplazándolos por ella y la clase 'asangre'.

Ejemplo: <p>&nbsp;</p> <p>Aquí empieza el

párrafoQuedando: <p class="salto25

asangre">Aquí empieza el párrafoEjemplo: <p><br /></p> <p>Aquí empieza el

párrafoQuedando: <p class="salto25

asangre">Aquí empieza el párrafo NOTA: La expresión tiene en

cuenta la posible repetición de saltos. Si en lugar de un 'salto25' se pretende uno diferente, el reemplazo tendrá que modificarse en consecuencia.

C.06 (<h.+>)(Capítulo [^\s]{1,7}|\pN)\s(.+)(</h.>\n)

\1\2\4 <p class="subtit">\3</p> Esta expresión permite modificar la cabecera h de una sección cuando junto al número de capítulo aparece el texto de su título, sustituyéndola por una clase 'subtit' que debe estar definida en el CSS

Ejemplo: <h3 id="heading_id_2">Capítulo 1 aquí viene el título</h3>

Quedando: <h3 id="heading_id_2">Capítulo 1</h3> <p class="subtit">aquí

viene el título</p> Ejemplo: <h3>1 aquí viene el

título</h3> Quedando: <h3>1</h3> <p

class="subtit">aquí viene el título</p> Si la denominación de la clase no

es 'subtit' hay que escribir en el reemplazo la que se haya definido en el CSS.

C.07 (<h.+>.+)<br\s?/>(\n\s{0,10})(.+)(?||<br\s?/>\n\s{0,10}(\s.+))(</h.>)

\1\5\2<p class="subtit">\3\4</p> Esta expresión permite modificar la cabecera h de una sección cuando se ha usado el salto <br /> para dividir el título, sustituyéndola por una clase 'subtit' que debe estar definida en el CSS

Ejemplo: <h3 id="heading_id_2">1<br /> aquí viene el

subtítulo</h3>Quedando: <h3

id="heading_id_2">1</h3> <p class="subtit">aquí

viene el subtítulo</p> Obviamente si la denominación de

la clase no es 'subtit' hay que escribir en el reemplazo la que se haya definido en el CSS

NOTA: La expresión localiza un máximo de dos <br /> dentro de la cabecera.

C.08 (?(?=<.+title.+>|<.+ttitulo.+>) |(<h[^>]*)(>)(<[^>]+>)?((?:[IVXLC]+\.?\s)?\pL|\PL+?\p{Lu})(<[^>]+>)?([^<>(]+\s|[^<>(]+)([«(]?[IVXLCD]+(?!\pL)[)»]?)?(<[^>]+>)?(<[^>]+>)?([^\n<>]+)?(<[^>]+>)?(<br />(\s)*)?(\p{Lu})?([^\n<>]+)?(</h.>))

\1 title="\4\L\6\E\7\L\g{10}\g{13}\E\g{14}\L\g{15}\E"\2\3\4\5\6\7\8\9\g{10}\g{11}\g{12}\g{13}\g{14}\g{15}\g{16}

Esta expresión trabaja en capítulos que tienen su título en mayúsculas pero queremos que en el índice del libro aparezcan en minúsculas. Para ello añade la etiqueta «title» al encabezado «h» correspondiente manteniendo las mayúsculas del título

Ejemplo: <h1>TÍTULO DE CAPÍTULO</h1>

Quedando: <h1 title="Título de capítulo">TÍTULO DE CAPÍTULO </h1>

Page 15: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]

C.09 (<h.)((?||\s(?!title).+)>)(<[^>]+>)?([^\pP<>]+)(<[^>]+>)?(|\pP)(</h.>\s*<p[^>]+sub[ct][^>]+>)(.)?(<.+?"?>)?([^<>\n]+)(<.+?"?>)?([^<>\n]+)?(</p>)

\1 title="\4. \U\8\E\L\g{10}\g{12}\E"\2\3\4\5\6\7\8\9\g{10}\g{11}\g{12}\g{13} Esta expresión permite añadir un subtítulo de un capítulo a la TOC

Ejemplo: <h2>Capítulo 99:</h2> <p

class="subtit">periodo 1939-1945</p> Quedando: <h2 title="Capítulo 99.

Periodo 1939-1945">Capítulo 99:</h2>

<p class="subtit">periodo 1939-1945</p>

C.10 (?<!\p{Ll})(\p{Lu})([^\p{Ll}/\pN\n\sº"!?».”…)]{2,}((\s\p{Lu}{1,3}(?!\.))+)?)(?<![.,:;?!)…—»])(?=</[ph].?>|[\s.,:;?!º)…—»](?!(?i)x?html|"-|1.1/|[\s\p{Lu}]+?</s))

\1<small>\2</small> Esta expresión sirve para localizar palabras de más de dos letras en mayúsculas permitiendo representar en versalitas todas las letras excepto la primera. Cuando la palabra va seguida de otras de menos de 4 letras, quedan incorporadas a la precedente.

Ejemplo: FRATERNIDADQuedando:

F<small>RATERNIDAD</small>Ejemplo: GRUTA DE LA

HERMITAQuedando: G<small>RUTA DE

LA</small>

NOTA: Realiza detecciones en los números romanos.

C.11 (\p{Lu}[^\p{Ll}/\pN\nº"!?»”…)]{4,})(?<![.,:;?!)…—»])(?=</[ph].?>|[\s.,:;?!º)…—»](?!(?i)x?html|"-|1.1/|\p{Lu}+))

<small>\1</small> Esta expresión localiza frases formadas por palabras en mayúscula para aplicarles la etiqueta <small> y representarlas en versalitas.

Ejemplo: GRUTA DE LA HERMITA

Quedando: <small>GRUTA DE LA HERMITA</small>

C.12 (?i)(\PL)\K(texto)(?=\PL) \1reemplazo Esta expresión busca la palabra exacta recogida en «texto» evitando palabras de mayor longitud que la puedan incluir en su interior.El reemplazo es a criterio del

editor.

Ejemplo: ramaEvitando: trama encaramado

C.13 ((?<!>)»|[\pN\pL](<.+?"?>)?)[—–]((<.+?"?>)?[\pN\pL])

\1-\3 Esta expresión, pese a que pueda parecer correctora, se incluye dentro de este grupo para facilitar el cambio de la raya — por el signo menos - en aquellos casos en los que dicha raya hace funciones de guión separador.

El hecho de situarla en este grupo se debe a facilitar el reemplazo cuando se obtienen múltiples coincidencias detectadas por la expresión 2.02. En esta situación la mencionada expresión lo considera como un error de la posición de la raya y facilita su ubicación correcta. Si las coincidencias son escasas el reemplazo de la raya por el signo menos puede hacerse de forma manual, pero si el error abarca a decenas de coincidencias es preferible emplear la utilidad aquí facilitada.

Ejemplo: 1960—1970Quedando: 1960-1970

NOTA: El reemplazo masivo de todas las coincidencias puede introducir signos menos en lugares donde sí debiera haber una raya como por ejemplo en casos como: «Esto es un error—dijo él». Otras RegEx detectarán posteriormente esta posible situación.

C.14 ([^>(\p{Lu}.]{4}[^\p{Lu}c])\K\.(?=\s([¿¡«\(\[]{0,2})(\p{Ll})(?=[^.]))

, En ocasiones la expresión 5.01 detecta múltiples errores de palabras en minúscula que siguen a un punto. La corrección propuesta es esa expresión consiste en transformar la primera minúscula en mayúscula.Sin embargo puede darse el caso

de que dicho punto no tenga que ser tal sino una coma. Si el número de errores de este tipo es escaso su corrección puede hacerse de forma manual, pero si son decenas de erratas la corrección del punto en coma puede realizarse con esta expresión.

Ejemplo: Por fin. dijo alguien,Quedando: Por fin, dijo alguien,

Page 16: RegEx 10.0 (Explicacion)

Búsquedas avanzadas Sigil ePubLibre

RegEx 10.0 (Explicacion).html[26/09/2014 6:30:32]