Seguimos con las expresiones regulares desde el punto que lo dejamos en el anterior artículo.
Ya sabes que puedes probar fácilmente las expresiones regulares en los filtros de Studio, pero su utilidad va más allá de los filtros. Consulta el anterior artículo o este otro para más información; también puedes ver las expresiones regulares en acción en este vídeo de YouTube.
Empezamos, entonces, en el punto número 4…
4. Negación, también con el sombrero ^:
A veces, puede ser más cómodo, especificar en el filtro lo que no queremos, y aquí el sombrero ^ es muy útil. Lo vemos con varios ejemplos:
El patrón gui[^o]n encontrará los segmentos con la palabra guión, pero no con guion, por ejemplo.
No te dejes liar: si tienes este segmento de Studio tanto guion como guión son correctos, si filtras con el patrón gui[^o]n, se mostrará dicho segmento en el Editor. El motivo es que el filtro ha encontrado guión, y el resto del segmento le da igual. Esto tiene que estar claro antes de seguir…
Gráficamente, el patrón gui[^o]n:

El patrón [^a]$ encontrará todos los segmentos que no terminan por la letra a:

Recuerda que $ indica el final de segmento.
Para encontrar todos los segmentos que no empiezan por un número decimal, el patrón sería ^[^\d]:

Que no te confunda el doble significado del sombrero ^:
- Fuera de corchetes , ^ significa que hay que buscar desde el principio del segmento (visto en la entrada anterior). Es el primer sombrero del patrón ^[^\d].
- Entre corchetes, ^ significa negación de lo que sigue. Es el segundo sombrero de ^[^\d].
¿Sabrías ahora decir a qué expresión regular corresponde esta figura?

Piénsalo un segundo, un solo segundo…, y confirma que es [^\d]$.
5. La barra vertical | para opciones
Cuando necesitamos dar opciones de búsqueda, la barra vertical | viene en nuestra ayuda.
Por ejemplo, el patrón gonduana|gondwana encontrará todos los segmentos con las cadenas gonduana y/o con gondwana.
O dicho gráficamente:

Como no es un carácter habitual, si quieres saber dónde está la barra vertical en tu teclado, puedes encontrarlo en:
- el teclado para España (en la tecla «1»)
- el teclado para Hispanoamérica (a la izquierda de la tecla «1»)
Nota: a la barra vertical también se la llama pleca.
6. Los paréntesis () para agrupar
Lo que sigue parece una palabra malsonante…, pero nada más lejos de la realidad.
Léelo bien: el patrón (p|m)adre encontrará todos los segmentos con las cadenas padre y/o con madre.
🙂
O dicho gráficamente:

A efectos prácticos, sería equivalente a padre|madre, ¿verdad?
Aunque el gráfico sería algo distinto:

Una vez aclarado esto, ¿lo podemos complicar un poco más?
El patrón (p|m|[^PM])adre encontrará madre o padre, pero no Padre ni Madre.

Recuerda que para ejecutar el anterior patrón, en el filtro de Studio deberás pulsar el botón:

Por cierto, para que veas que la sintaxis es importante: si en el filtro de Studio se te olvidara escribir algún paréntesis del patrón (p|m|[^lPM])adre , recibirías el siguiente mensaje:

7. Repeticiones hasta la saciedad
Con las expresiones regulares podemos especificar las repeticiones. Puede ser muy útil, así que conviene aprender las posibilidades que hay:
7.a. Signo + para indicar 1 o más veces
Por ejemplo, el patrón a+ encontrará por lo menos una letra a. Por tanto, encontraría a, aa y aaaa.
![]()
El patrón \d+ encontrará 1, 12, 135 y 894, que en la práctica sería lo mismo que [0-9]+.
7.b. Signo * para indicar ninguna, 1 o más veces
Es parecido al signo más +, pero la diferencia es sutil: además, ¡puede no aparecer ninguna vez!
El patrón a* gráficamente es:

Quizás con un ejemplo práctico, verás la diferencia práctica con el signo más +.
El patrón pol*o encontrará polo, poo y pollo. Se entiende, ¿verdad?

Nota: como ves, el asterisco * regex tiene un significado diferente al comodín * de Microsoft Word. Cuesta pillarlo, y hasta despista, lo sé…
De nuevo, la diferencia es sutil: el carácter se puede repetir una o ninguna vez
El patrón pol?o encontrará poo y polo.
Gráficamente es así:
![]()
Como has podido ver, los signos +, * y ? se aplican al carácter inmediatamente anterior. Si quieres buscar repeticiones de más de un carácter, deberás usar los paréntesis.
Por ejemplo, el patrón (yo)+ encontrará yo y yoyo.

7.d. Llaves {x,y} si sabes el número de repeticiones
Las sintaxis posibles son tres:
{x} si se repite x veces
Un solo parámetro entre llaves: el número exacto de repeticiones.
Por ejemplo, el patrón bar{2}a encontrará barra, pero no bara ni barrra.

{x,y} si se repite entre x e y veces
Dos parámetros entre llaves: el mínimo y máximo de repeticiones.
Por ejemplo, el patrón bar{1,2}a encontrará bara o barra, pero no barrra.

{x,} si se repite al menos x veces
Un solo parámetro entre llaves, pero seguido de una coma: el mínimo de repeticiones.
Por ejemplo, el patrón bar{1,}a encontrará bara, barra, barra y barrra, etc.
![]()
* * * * * * * * *
Pregunta: ¿sabrías decir lo que encontraría el patrón ISO\d{1,4}?
Si contestas que las cadenas entre ISO0 e ISO9999, has dado en el clavo:

* * * * * * * * *
Pregunta: si quisieras filtrar en Studio todos los segmentos que tienen más de cuatro dígitos en la traducción, porque podría indicar que la separación de millares no está marcada de alguna forma (con el punto en España, con la coma en México o con un espacio duro según la última recomendación de la RAE), ¿cuál es el patrón que necesitarías?
La respuesta es \d{5,}, un patrón que encontrará 10000, y en el Editor podrás corregirlo fácilmente a «10.000», por ejemplo. Como ves, otra aplicación práctica de las expresiones regulares para tu proceso de calidad.
* * * * * * * * *
Pregunta: si quisieras filtrar en Studio todos los segmentos que tienen un dígito seguido de una letra, como carrera de 10km o potencia de 99W, porque podría indicar que no se ha separado la cifra de la unidad de medida, ¿cuál es el patrón que necesitarías?
El patrón que deberías usar es \d[a-z], ya que encontrará los segmentos con las cadenas 0k o 9W, y en el Editor podrás corregirlos fácilmente a «10 km» y «99 W». ¡Otra aplicación práctica de las expresiones regulares para tu proceso de calidad!
La madre de todas las expresiones regulares
Como ejemplo de lo visto hasta ahora, vamos a diseñar un patrón más complicado: el que encuentre direcciones de correo electrónico válidas del tipo:
nombre.1-a_parte@dominio1.com
¡Divide y vencerás!
decían Julio César y Napoleón.
Pues nosotros dividiremos la cadena en 3 partes, para conquistar esta expresión regular.
Para encontrar la primera parte, nombre.1-a_parte@, que está a la izquierda del símbolo de arroba @, hay que saber que esta parte puede contener letras, números, puntos, caracteres de subrayado y guiones.
Con ese dato en mente, el patrón [a-z0-9_.-] podrá encontrar uno de esos caracteres, ¿verdad?
Pues bien, está claro que con el patrón [a-z0-9_.-]+ ya tenemos la primera parte nombre.1-a_parte.
Date cuenta de que he puesto el signo + y no * porque debe haber al menos un carácter.
Luego va el símbolo de arroba @, ¿verdad?
Así que el patrón [a-z0-9_.-]+@ encontrará hasta la arroba incluida, es decir: nombre.1-a_parte@.
La segunda parte, es decir, el nombre de dominio, no puede tener subrayados ni puntos, así que el patrón [a-z0-9]+\. nos encontrará dominio1., (incluido el punto).
En la tercera parte, es decir, en el dominio de nivel superior (la cadena com) solo hay letras, así que el patrón [a-z]{2,} nos servirá.
Fíjate que el valor mínimo de «2» del primer parámetro permite encontrar los dominios de 2 letras, como el es. No se escribe el segundo parámetro para poder encontrar los dominios info o de más letras aún.
Todo junto, el patrón [a-z0-9_.-]+@[a-z0-9]+\.[a-z]{2,} nos encontrará las direcciones de correo electrónico válidas nombre.1-a_parte@dominio1.com:

Ha sido largo de contar, pero no ha sido difícil, ¿verdad?
Si estás de acuerdo en que no ha sido complicado, te voy a pedir una cosa más: que diseñes el patrón que haga lo mismo, es decir, que encuentre direcciones de correo electrónico, pero con la restricción de que la segunda parte, es decir, el nombre de dominio, tenga como mínimo 2 caracteres y 63 como máximo (que si no me equivoco es lo que sucede en la realidad). Para ello, básate en el el patrón que te he dado, y modifícalo un poquito…
Sinceramente, si has llegado hasta aquí, ¡estás preparado para el asalto a las expresiones regulares!
Aún faltan cosas por contar, es verdad, pero ya tienes mucho avanzado si sabes sacar el jugo a lo que hemos visto en estos tres artículos dedicados a las expresiones regulares.
Si necesitas recuperar el norte, y saber para qué sirve todo este jaleo de las expresiones regulares, en este vídeo de YouTube te indico casos prácticos de las expresiones regulares en los filtros de Studio.
* * * * * * * * *
Como en anteriores artículos, las versiones gráficas de los patrones han sido posibles gracias a www.regexper.com.
Abre ese enlace para probar tus expresiones regulares. ¡Ya sabes que es una web gratuita!
En próximos artículos, seguiremos tocando las expresiones regulares.
Así que si no quieres perderte la siguiente entrega sobre expresiones regulares, apúntate a mi boletín o sígueme en Twitter (@jssprt), y te avisaré en cuanto salgan.






"Los paréntesis () para agrupar" muy bien explicado, gracias por cuidar el detalle.
Gracias a ti. Espero que te sirva lo poco de expresiones regulares que hay en el blog.
Un abrazo,
… Jesús Prieto …
buenas tardes me gustaria saber como es el simbolo regular para buscar las ultimas palabras de un verso en cualquiera de los programas geany o notepad gracias
Hola, Dani:
En Notepad++ puedes marcar las últimas letras de cada línea con una expresión regular como esta:
...$
3 puntos seguidos y el símbolo de dólar. En este caso, marcará los 3 últimos caracteres porque hay 3 puntos. A partir de aquí puedes pensar en buscar palabras.
No conozco Geany, así que ahí no sé si funcionará…
¡Suerte!
… Jesús Prieto …