Saltar al contenido principal
SubtitleMatrix

Reemplazar con expresiones regulares

Texto y estiloReemplazo con expresiones regulares
O pega el texto de los subtítulos

Opciones

Una expresión regular, comparada con el texto de cada bloque. Cada coincidencia se reemplaza. Las dos páginas de esta sección comparten el recuadro: una lo abre vacío para un patrón que ya tengas, la otra empieza con un patrón que puedes editar en ambos sentidos.

En qué se convierte cada coincidencia. Déjalo vacío para eliminar cada coincidencia. A diferencia de la página de buscar y reemplazar literal, aquí el signo de dólar es especial: $1 representa el primer grupo entre paréntesis de la coincidencia, $& toda la coincidencia y $$ un signo de dólar literal.

Las letras con las que se compila el patrón. g y u están activadas por defecto: u hace que el patrón lea el texto carácter a carácter en lugar de unidad de código a unidad de código, que es lo que hace que \p{L} y compañía signifiquen lo que dicen. Añade i para ignorar mayúsculas y minúsculas, m para anclas de línea, s para que un punto coincida con un salto de línea. Vacía el recuadro para compilar sin ninguna bandera. Cualquier otra letra se rechaza en lugar de ignorarse, porque un patrón ejecutado con banderas que no pediste es un patrón que en silencio significa otra cosa.

La velocidad de fotogramas con la que se cuentan los tiempos. En las páginas de formato es lo que necesita MicroDVD, porque guarda los tiempos como números de fotograma. En las páginas de velocidad de fotogramas es la velocidad con la que se cronometró el archivo (la versión para la que se hicieron los subtítulos), y el segundo recuadro de la página toma la velocidad del video con el que vas a usarlos. 23,976, 24, 25, 29,97, 30, 50, 59,94 y 60 son las habituales. Equivocarla desplaza toda la línea de tiempo, y en las páginas de velocidad de fotogramas la desplaza por una proporción en lugar de por una cantidad fija.

Rellena Patrón para ejecutar.

Esta página reescribe el texto de dentro de los bloques de subtítulos con un patrón que escribes tú. Un patrón no es una cadena fija: `\d+` significa cualquier serie de cifras, `(cat|dog)` significa una u otra palabra, y un punto representa cualquier carácter. Cada coincidencia, en cada bloque, se reemplaza en una sola pasada, y la página informa de cuántos sitios cambiaron. Solo se mueve el texto: cada tiempo de inicio y de fin pasa exactamente como estaba.

El cuadro de reemplazo tampoco es una cadena fija. Un signo de dólar es especial: `$1` representa lo que capturó el primer grupo entre paréntesis, `$&` la coincidencia entera y `$$` un signo de dólar literal. Eso es lo que permite que una regla ordene miles de líneas distintas: borrar el espacio suelto antes de un punto sin perder la puntuación, porque la puntuación es lo que capturó el grupo.

Los patrones se ejecutan con `g` y `u` activas. `g` significa encontrar cada coincidencia y no solo la primera; `u` hace que el patrón lea el texto carácter a carácter en lugar de unidad de código a unidad de código, y es lo que hace que `\p{L}` signifique una letra. Añade `i` para ignorar mayúsculas y minúsculas, `m` para que los anclajes funcionen línea a línea y `s` para que un punto coincida con un salto de línea. Vacía el cuadro de banderas para ejecutar sin ninguna. Cualquier otra letra rechaza la pasada entera en lugar de ignorarse, porque un patrón ejecutado con banderas que no pediste es un patrón que en silencio significa otra cosa.

El estilo en línea se conserva cuando hay un sitio honesto donde pueda quedarse: una etiqueta se desplaza cuando la edición ocurre fuera de ella y se estira cuando la edición ocurre dentro. Cuando una coincidencia cruza el borde de una etiqueta, el marcado se descarta y se cuenta en el informe de pérdidas, porque la alternativa es una cursiva alrededor de las palabras equivocadas. No se sube nada, cada archivo se vuelve a escribir en su propio formato y una temporada entera puede pasar por la cola de una vez.

Ejemplos

Conservar la puntuación con un grupo de captura

Entrada

1
00:00:01,000 --> 00:00:02,000
We stopped , and waited .

2
00:00:03,000 --> 00:00:04,000
Right !

Resultado

1
00:00:01,000 --> 00:00:02,000
We stopped, and waited.

2
00:00:03,000 --> 00:00:04,000
Right!

El patrón es una serie de espacios seguida de uno de . , ! ? — y el paréntesis convierte esa puntuación en el primer grupo, así que `$1` la devuelve. Tres coincidencias, tres cambios. Una búsqueda literal no puede expresar esto en absoluto: solo puede convertir una cadena fija en otra cadena fija.

Un patrón, las dos grafías

Entrada

The Colour of the sky.
colourless and calm.

Resultado

The color of the sky.
colorless and calm.

Con `i` en el cuadro de banderas, `colour` también atrapa la grafía con mayúscula. Fíjate en lo que la bandera no hace: la mayúscula con la que empezaba la línea desaparece, porque un patrón no tiene idea de qué está haciendo una palabra en una oración. Si la mayúscula importa, eso es una segunda regla.

Una coincidencia que cruza el borde de un tramo en cursiva

Entrada

1
00:00:01,000 --> 00:00:04,000
<i>Hello there</i>, welcome aboard

Resultado

1
00:00:01,000 --> 00:00:04,000
Hello there. Welcome aboard

La coincidencia empieza dentro de la cursiva y termina fuera, así que la mitad de lo que cubría el marcado desaparece y no queda un sitio correcto para él. Se descarta y se cuenta en lugar de dejarlo envuelto alrededor de las letras equivocadas.

Preguntas frecuentes

¿Cómo conservo una parte de lo que coincidió con el patrón?

Pon paréntesis alrededor de esa parte en el patrón y consúltala como `$1` en el reemplazo: `$2` para el segundo grupo, y así sucesivamente. El patrón `\s+([.,!?])` con el reemplazo `$1` borra el espacio y conserva la puntuación, que es exactamente el trabajo que una cadena fija no puede hacer. `$&` representa la coincidencia entera y `$$` un signo de dólar que de verdad quieres en el texto.

¿Con qué banderas se ejecuta el patrón?

`g` y `u` están activas por omisión. `g` encuentra cada coincidencia en lugar de detenerse en la primera, y `u` hace que el patrón lea el texto carácter a carácter, que es lo que hace que `\p{L}`, `\p{N}` y sus parientes signifiquen lo que dicen. Añade `i` para ignorar mayúsculas y minúsculas, `m` para que los anclajes funcionen línea a línea y `s` para que un punto coincida con un salto de línea. Vaciar el cuadro ejecuta sin ninguna bandera. Cualquier otra letra —`x`, `y`, `d`— rechaza la pasada en lugar de ignorarse.

¿Es lo mismo que la página de buscar y reemplazar?

No, y la diferencia está en lo que escribes en el cuadro. Aquella página compara caracteres exactamente como están escritos, así que lo único que puede salir mal es no encontrar nada. Esta ejecuta un programa, que puede coincidir en miles de sitios en una sola pasada y reescribirlos todos. Por eso el patrón empieza vacío aquí, por eso se rechazan las banderas desconocidas y por eso las dos páginas están separadas: en una, una reescritura que no ocurrió es una errata; en la otra, puede ser un patrón que en silencio significaba otra cosa.

¿Qué pasa cuando dos coincidencias se solapan?

Gana la que está más a la izquierda y el recorrido continúa después de ella, que es lo que hace cualquier motor de expresiones regulares. Así, `aa` contra `aaaa` encuentra dos coincidencias y no tres, y tras reemplazarlas el texto es `bb`. Si esperabas tres, el patrón está describiendo algo que el motor no puede hacer, y es mejor saberlo antes de que vuelva el archivo.

¿La página me protege de un patrón lento?

Rechaza una familia antes de ejecutar nada: una repetición aplicada a un grupo que ya repite sin límite, como `(a+)+` o `(\d+)+`. Esos son los patrones que bloquean una pestaña del navegador, y treinta caracteres de entrada bastan. Hay tres formas que no se detectan y conviene evitar a mano: dos alternativas solapadas dentro de un grupo repetido, como `(a|a)+`; varias repeticiones solapadas una al lado de otra, como `a*a*a*b`; y recuentos enormes, como `(a{100}){100}`. No se comprueba ningún reloj, porque un límite de tiempo haría que el mismo archivo saliera distinto en una máquina rápida y en una lenta.

¿Qué ocurre con la cursiva y otros estilos cuando se reescribe el texto?

Una etiqueta fuera de la edición se desplaza con el texto, y una etiqueta que contiene la edición se estira o se encoge para ajustarse. Cuando una coincidencia cruza el borde de una etiqueta no queda un sitio correcto para el marcado, así que se descarta y el informe de pérdidas dice cuántas se descartaron. Los tiempos de karaoke se descartan siempre que una coincidencia los toca, porque la división por sílabas ya no se alinea con las palabras.

¿Puedo usar el reemplazo con expresiones regulares en cualquier formato de subtítulos?

Sí. El patrón se aplica al texto de cada bloque, y los doce formatos leen ese texto, así que un SRT, un archivo WebVTT, un ASS con estilos, una hoja de letras LRC o una transcripción en texto plano funcionan igual. Cada archivo se vuelve a escribir en el formato en que llegó, y los números de fotograma de un archivo MicroDVD usan la velocidad de fotogramas del panel.

Herramientas relacionadas