No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Expresiones Regulares

Curso de Expresiones Regulares

Alberto Alcocer (Beco)

Alberto Alcocer (Beco)

Las clases predefinidas y construidas

6/29
Recursos

Las búsquedas en las expresiones regulares funcionan en múltiplos de la cantidad de caracteres que explícitamente indicamos.

Aportes 174

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Las búsquedas en las expresiones regulares funcionan en múltiplos de la cantidad de caracteres que explícitamente indicamos.

Regex Qué hace Descripción Inverso
. Character Cualquier caracter, selecciona cada uno de los caracteres
/d Digit Digits: (d minúscula) Encuentra todos los dígitos (número) de 0 a 9, es equivalente a poner [0-9]. \D
/w Word All word characters, Encuentra todos los caracteres que son parte de una palabra, tanto letras (minúsculas o mayúsculas) como números, es equivalente a poner [a-zA-Z0-9_]. \W
/s Space WhiteSpaces, Encuentra todos los espacios (los saltos de línea y tabuladores también son espacios). \S
[0-9] Specific Digit Encuentra todos los dígitos de 0 a 9.
[0-9a-zA-Z] Specific Word Character Encontrará todos los caracteres que estén del 0-9 o que sean letras mayúsculas o minúsculas (\w)
[a-zA-Z] nos encontrará solamente las letras, tanto mayúsculas como minúsculas.
\ Diagonal invertida Escapa los caracteres, permite que un carácter especial se muestre

Para la gente de windows con teclado en español:

  • Alt+92 = \
  • Alt+91 = [
  • Alt+93 = ]
  • Alt+62 = >
  • Alt+60 = <
  • Alt+125 = }
  • Alt+123 = {

Buscando hexadecimales de 6 dígitos y con # al inicio

[#][0-9a-fA-F]{6}

Resumen definitivo
Del . nacen 3 tipos diferentes de clases predefinidas por la sintaxis de expresiones regulares: El dígito, la palabra, los espacios

Aqui encontraran a detalle el vocabulario completo de expresiones regulares: https://es.wikipedia.org/wiki/Expresión_regular

Utilizamos “” , no usen el slash común(/) por que no les andará la búsqueda. para usarlo: Alt + 92

\d= Busca dígitos
\d\d\d = representa segmentos consecutivos segun la cantidad de \d que se coloquen
\s= busca espacios
\w= representa números y letras, exceptuando caracteres especiales
\t= representa el tabulador
.= representa el carácter “.”, (NO la clase)

[0- 9]= representa todos los números del 0 al 9
[a-z] equivale a d, pero sin representar del 0 al 9
[A-Z]= Busca todos los caracteres desde la a a la z solo en mayusculas.

{} =Esta expresión le dice al motor de búsqueda que encuentre dos dígitos contiguos. Utilizando esta fórmula podríamos convertir el ejemplo “^\d\d/\d\d/\d\d\d\d$” que servía para validar un formato de fecha en “^\d{2}/\d{2}/\d{4}$” para una mayor claridad en la lectura de la expresión.

\d <- encuentra los caracteres numéricos
\w <- caracteres de 0-9, a-z, A-Z y _
\s <- espacios, tabs y saltos de linea
[0-9] <- encuentra los dígitos incluidos en el rango
[a-zA-Z0-9_] <- encuentra los caracteres en el rango equivale al \w
[a-fA-F0-9_.] <- encuentra hexadecimales y ademas guion bajo y el punto
La búsqueda de hexadecimales de 6 dígitos seria:
[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]

Mi solución al reto:

^#[a-fA-F0-9]{3,6}

^ representa el comienzo de la linea.
# debe contener ese caracter.
[] rango de caracteres ascii de la a a la z en mayúsculas y minúsculas del 0 al 9.
{} longitud de la cadena de 3 a 6.

Y ahora que lo pienso mejor esta no es la mejor solución porque debería ser longitud de cadena de 3 y 6 y no un rango de 3 a 6.
😃

Las Expresiones Regulares simplemente nos facilita resolver muchos problemas a la hora de programar, vale la pena estudiarlo.

**Clases predefinidas por la sintaxis de las expresiones regulares **

Clases predefinidas por la sintaxis de las expresiones regulares


  • Digito \d: Busca todos los dígitos
  • Palabra \w: Todo lo que puede ser una palabra, letras, dígitos y guiones bajo
  • Espacios y tab \s: Espacios en blanco

Clases construidas


Son aquellas que nosotros creamos con la ayuda de corchetes [], para hacerlo ponemos el rango de búsqueda entre corchetes. Ejemplos:

  • [a-z] Busca todos los caracteres de la a la z, pero solo minúsculas.
  • [a-zA-Z] Busca todos los caracteres de la a la z, incluye mayúsculas.
  • [0-9] Busca los números del 0-9
  • [4-5x-z] Busca los números y dígitos entre esos rangos (4 al 5 y x a la z)

Escapar: Le decimos a las expresiones regulares que no queremos usar la clase que representa un carácter si no su valor como el caso del . y se hace agregándole un slash (.)
Llaves {}: Le indicamos cuantos caracteres consecutivos debe de hacer match con nuestra cindición.

Reto: Hacer un sistema que encuentre códigos Hexadecimales

#[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]

Hay soluciones mas eficientes que esta, pero a la altura del curso esto es lo que se puede hacer.
Para una referencia de como hacer una solución más precisa que esta pueden ir AQUÍ.

(.) :busca caracteres
\d : busca digitos
\w: numeros y letras
\s : busca espacios

#([a-fA-F0-9]){6}```

Las clases predefinidas y construidas


Clases predefinidas

Las clases predefinidas en expresiones regulares son conjuntos de caracteres que representan categorías comunes de caracteres. Estas clases hacen que sea más fácil y conveniente buscar patrones específicos en el texto sin tener que enumerar cada carácter individualmente. Las clases predefinidas son una característica útil y poderosa de las expresiones regulares, ya que te permiten crear patrones más concisos y legibles.

Aquí hay algunas de las clases predefinidas más comunes:

  1. \d: Coincide con cualquier dígito numérico del 0 al 9.
  2. \D: Coincide con cualquier carácter que no sea un dígito numérico.
  3. \w: Coincide con cualquier carácter de palabra, que incluye letras (mayúsculas y minúsculas), dígitos y el guion bajo _.
  4. \W: Coincide con cualquier carácter que no sea un carácter de palabra.
  5. \s: Coincide con cualquier espacio en blanco, incluyendo espacios, tabulaciones y saltos de línea.
  6. \S: Coincide con cualquier carácter que no sea un espacio en blanco.

Estas clases predefinidas se utilizan dentro de expresiones regulares para crear patrones que se ajusten a ciertos tipos de caracteres. Por ejemplo:

  • La expresión regular \d{3}-\d{2}-\d{4} buscaría patrones de números en el formato de un número de seguro social (como 123-45-6789).
  • La expresión regular \w+ coincidiría con cualquier palabra en el texto.
  • La expresión regular \s+ buscaría uno o más espacios en blanco consecutivos en el texto.

Usar clases predefinidas hace que las expresiones regulares sean más poderosas y compactas, permitiéndote crear patrones más complejos con menos caracteres escritos.


Clases construidas

Las clases de caracteres construidas son conjuntos personalizados de caracteres que puedes definir dentro de una expresión regular para buscar coincidencias específicas. Aunque técnicamente no son “clases predefinidas”, son un componente importante de las expresiones regulares y te permiten especificar conjuntos de caracteres a medida según tus necesidades.

Aquí hay algunos ejemplos de cómo se construyen estas clases de caracteres:

  1. [...]: Clase de caracteres: Puedes definir una clase de caracteres encerrando los caracteres que deseas coincidir entre corchetes. Por ejemplo, [aeiou] coincidirá con cualquier vocal en minúscula.

  2. [^...]: Clase de caracteres negada: Agregando un símbolo de circunflejo (^) al principio de una clase de caracteres, puedes crear una clase negada. Por ejemplo, [^0-9] coincidirá con cualquier carácter que no sea un dígito numérico.

  3. [a-z], [A-Z], [0-9]: Rangos de caracteres: Puedes especificar rangos de caracteres al utilizar guiones dentro de una clase de caracteres. [a-z] coincidirá con cualquier letra minúscula, [A-Z] con cualquier letra mayúscula, y [0-9] con cualquier dígito numérico.

  4. [...]: Combinación de caracteres: Puedes combinar múltiples clases o rangos dentro de una misma clase de caracteres. Por ejemplo, [a-zA-Z] coincidirá con cualquier letra, tanto minúscula como mayúscula.

  5. \: Escape de caracteres especiales: Si deseas incluir caracteres especiales como -, ] o [ dentro de una clase de caracteres, debes escaparlos con una barra invertida \.

Estos son solo algunos ejemplos de cómo puedes construir clases de caracteres personalizadas en expresiones regulares. Estas clases te brindan flexibilidad para definir patrones específicos de coincidencia en función de los caracteres que necesitas buscar en el texto.

Beco es un excelente profe!
Hasta el momento de todos los cursos que he tomado, explica claramente y de manera concisa, directo al punto.

Para colores hexadecimales:

#[0-9a-fA-F]{6}

traduccion al lenguaje natural:

la cadena de caracteres debe iniciar con #, seguido de 6 caracteres que sean letras minusculas o mayusculas de la A a la F o números del 0 al 9

Les paso por acá una combinaciòn de palabras con hexadecimales para que puedan hacer la practica en sus editores.

#FFFFFF #FFF
AZUR #F0FFFF #FFFFFF
CREMA #F5FFFA #FFFFFF
NIEVE #FFFAFA #FFFFFF
MARFIL #FFFFF0 #FFFFFF
BLANCO FANTASMA #F8F8FF #FFFFFF
BLANCO FLORAL #FFFAF0 #FFFFFF
AZUL ALICIA #F0F8FF #FFFFFF
CIAN CLARO #E0FFFF #CCFFFF
MELÓN VERDE #F0FFF0#FFFFFF #FFFFFF
AZUR #F0FFFF #FFFFFF
CREMA #F5FFFA #FFFFFF
NIEVE #FFFAFA #FFFFFF
MARFIL #FFFFF0 #FFFFFF
BLANCO FANTASMA #F8F8FF #FFFFFF
BLANCO FLORAL #FFFAF0 #FFFFFF
AZUL ALICIA #F0F8FF #FFFFFF
CIAN CLARO #E0FFFF #CCFFFF
MELÓN VERDE #F0FFF0
#DDA0DD #CC99CC
GRIS #BEBEBE #CCCCCC
VERDE CLARO #90EE90 #99FF99
VIOLETA #EE82EE #FF99FF
AMARILLO #FFFF00 #FFFF00
TURQUESA #40E0D0 #33CCCC
MADERA FORNIDA #DEB887 #CCCC99
AMARILLO VERDE #ADFF2F #99FF33
BRONCEADO #D2B48C #CCCC99
TURQUESA MEDIO #48D1CC #33CCCC
SALMÓN CLARO #FFA07A #FF9966
AGUAMARINA MEDIO #66CDAA #66CC99
GRIS OSCURO #A9A9A9 #999999
ORQUÍDEA #DA70D6 #CC66CC
VERDE MAR INTENSO #8FBC8F #99CC99
AZUL CIELO INTENSO #00BFFF #00CCFF
MARRÓN ARENA #F4A460 #FF9966
DORADO #FFD700 #FFCC00
VERDE PRIMAVERA MEDIO #00FA9A #00FF99
CAQUI OSCURO #BDB76B #CCCC66
ACIANO AZUL #6495ED #6699FF
ROSA CALIENTE #FF69B4 #FF66CC
SALMÓN OSCURO #E9967A #FF9966
TURQUESA OSCURO #00CED1 #00CCCC
VERDE PRIMAVERA #00FF7F #00FF66

Mi respuesta al reto:[#][a-fA-F0-9]{3,6}

<[#][a-fA-F0-9]{6}>

Muy buena clase instructor Alberto, se entiende completamente que hacen las clases predefinidas de expresiones regulares y cómo podemos construir las propias. Acá dejo la lista de las más destacables de esta lección:
 
• \d = Selecciona dígitos. Equivalente construida: [0-9]
• \w = Resalta caracteres. Equivalente: [a-zA-Z0-9]
• \s = Muestra los espacios en blanco. Equivalente: [ ]
• [ \.] = Busca el símbolo de punto
   
Por cierto, esto fue lo que paso cuando trate de buscar los saltos de línea (\n):
  

Buen reto el de la besuqueada de los hexadecimales tome una lista de colores en hexadecimal con caracteres y binarios y para solo buscar los hexadecimales construí esta clase [#a-fA-F0-9], hasta aquí podía encontrar los hexadecimales pero también encontraba palabras que tuvieran algún dígito o carácter dentro de mi clase y descubri las {} que ayudan a indicar que solo se deben repetir n cantidad de veces para ser considerados en la búsqueda y Vuuuaaala (voilà)!!!

[#a-fA-F0-9]{7}

Para mi funciona en la busqueda hexadecimal
[#a-fA-F0-9]{7}

. selecciona todos los caracters
el \ con alt+92 en windows si no tienes teclado en ingles

\d selecciona estrictamente digitos
\w selecciona estrictamente letras y digitos
\s selecciona espacios

es facil recordar que d es por digits, w es por words, s es por spaces, osea su respectivo en ingles

el [] con alt+91 (para el [) y alt+93 (para el ]) en windows si no tienes teclado en ingles

[0-9] busca digitos de manera mas estricta que usando \d
[a-z] busca letras de manera estricta

se usa \ para escapar caracteres especiales como . como lo harias en javascript

las expresiones entre [] se denominan clases

Código hexadecimal

/#[A-F0-9]{6}/i
Para quién use VSCode, podría pasarles que [A-Z] no trae las mayúsculas.

Es una configuración del VS.

Con :
Match Case (Alt + C)  pueden ajustarlo.

Esta expresión encuentra los hexadecimales
[a-fA-F0-9]+

Las búsquedas en las expresiones regulares funcionan en múltiplos de la cantidad de caracteres que explícitamente indicamos.
Las clases se identifican con un contra slash , y luego usar la clase: d, s, w.
Si queremos buscar digitos, números, cualquiera que sea, usamos la expresión “\d”. Esto seleccionará todos los números, e ignorará los demás carácteres.
Si quiero encontrar 3 números, usaré “\d\d\d”, esto encontrará a todos los múltiplos de 3.
Para buscar carácteres alfanuméricos y el guión bajo, se utiliza el \w. Para los acentos o las letras como la ñ el \w no funciona.
Para que después de cualquier carácter alfanumérico también reconozca un espacio, se utiliza el \w\s.
El espacio se reconoce con el \s.
Si quiero encontrar solo números, puedo utilizar [0-9] y es lo mismo que usar \d. Es más potente, además que la búsqueda se hace más sencilla, ya que no necesariamente puedo utilizar para buscar todos los números, sino también para definir cuáles, por ejemplo: [6-9]. Y no es únicamente con números, también con letras [a-z] y en cualquier rango [h-t].
Para poder encontrar al carácter “.”, no la clase operadora “.”, se utiliza “.”.
Para construir una clase entre diferentes rangos se utiliza entre corchetes, y sin espacio entre los rangos, por ejemplo [a-fA-T0-5_.]
#ABE045
Para buscar un código hexádecimal, utilizo la siguiente clase [#A-F0-9]{6}

Un pequeño ejemplo buscando el código hexadecimal junto con el carácter # 🐗🐗

NOTA: \. es para referirse al caracter . y /. es para referirse a la clase .

Le envío mi solución del reto:
[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]

Para que no se confundan les comparto la corrección de los signo en English
slash "/"
backslash “”

Pero porque llama palabras a las letras? Es un lío

Punto (.) denota un carácter cualquiera
\d : Representa un dígito
\w: Representa una letra
\s: Representa un espacio

Para realizar búsquedas mas especificas
[a-z]
[A-Z]
[0-9]
[a-zA-Z0-9]

Las expresiones regulares son esencialmente las mismas a traves de los diferentes lenguajes.

\ backslash

Vengo del curso; Terminal y Linea de comandos.

cuando inicie este curso, me sentia enrdado hasta que llegue a esta clase y relacione todo lo que habia escuchado… las regex tienen poner muchachos!!!

[#]?[a-fA-F0-9]{2}

Esta fue mi solución

Hice esta expresión regular para encontrar 2 números hexadecimales:

[0-9A-F][0-9A-F]

Reto: Expresión regular tipo Clase Construida para encontrar los caracteres seguidos que pertenecen al grupo Hexagecimal.

[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]
/^[0-9A-Fa-f]+$/

Esta expresión regular busca coincidencias en una cadena que consista únicamente en caracteres hexadecimales (0-9, A-F o a-f).

^: Representa el inicio de la cadena.

[0-9A-Fa-f]: Define una clase de caracteres que incluye dígitos del 0 al 9 y letras de la A a la F, tanto en mayúsculas como en minúsculas.

+: Indica que debe haber uno o más caracteres que coincidan con la clase de caracteres definida.

$: Representa el final de la cadena.

En resumen, esta expresión regular verificará si una cadena está compuesta únicamente por caracteres hexadecimales.

Ya había usado las expresiones regulares en algunos proyectos, pero no sabía exactamente que ese era su nombre y todas las posibilidades que nos brinda, sin duda comenzaré a aplicarlas y tratar de sacar el máximo provecho.

Si el reto es buscar todos los catacteres de la tabla ASCII por sus valores hexadecimales, la respuesta es:

[\x00-\x7F]

Encontrar hexadecimales

[a-fA-F0-9]{3,6}

Esto es para CSS y funciona bien, pero espero ver cómo se puede mejorar en la próxima clase, solo puse un #antes y cree la clase y la repetí, pero dice el maestro que se puede hacer sin repetir multiples veces la clase
#[a-fA-F1-9][a-fA-F1-9][a-fA-F1-9][a-fA-F1-9][a-fA-F1-9][a-fA-F1-9]

Unico detalle malo del curso

Usar algo tan basico como un editor de texto para explicar las expresiones regulares, porque no hacerlo usando un IDE (sea cual sea, en el idioma que sea) o alguna herramienta que permita hacerlo de una manera mas profesional, vengo del curso de Machine learning y es decepcionante que este curso lo hayan agregado como finalizacion del area principiante dando entrada al area intermedia de la carrera. La estandarizacion en algunos casos no es buena, ya que veo que muchos vienen del curso de linea de comandos, lo cual no esta a la par a de donde venimos los de machine learning, la recomendacion es crear un curso aparte con herramientas mas avanzadas o quitarlo e indicar que aprendamos regex por medios propios los que venimos de alla.

import re

fh = open(r"C:\Users\Alfonso Zapata\jupyter\Cursos\Junio 2022\Curso de expresiones regulares - platzi\REGEX-master\liners.txt", "r").read()

fh

# for line in re.findall("\d", fh):
#     print(line)

line = re.findall("\d", fh) 
print(line)

Para los que han intentado hacerlo en la terminal con grep, pueden usar los equivalentes:

Regex Equivalente ¿Qué hace? Descripción
. . Caracter Cualquier caracter, selecciona cada uno de los caracteres.
\d [0-9] Dígito (d minúscula) Encuentra todos los dígitos (números) del 0 al 9
\w [0-9a-zA-Z_] palabra Encuentra todos los caracteres que son parte de una palabra, tanto letras (minúsculas o mayúsculas), como números.
\s \\s Espacio Encuentra todos los espacios (saltos de línea y tabuladores también son espacios.

Hay una pagina web para probar estas expresiones regulares: https://regexr.com/

buscar hexadecimales de dos digitos (tabla ASCII)
[A-Fa-f0-9][A-Fa-f0-9]

BECO es genial!!!Ojala me diera clases en la uni jaja

Aquí esta mi reto:

Trate de factorizar lo más que pude
Lo que no entendí es que en los aportes colocan el numeral(#) pero no se en qué cambia, alguien me podría explicar porfa. También encontré que colocaban “\b”, me podrían decir que indico con eso
Pd: yo uso Visual Studio Code

5. Mis apuntes sobre: “Las clases predefinidas y construidas”

-El dígito -> \d
-La palabra -> \w --> “all word characters”, de la A a la Z mayúsculas o minúsculas,
los dígitos y el guión bajo (_), no incluye letras acentuadas.
-los espacios -> \s (blank spaces) [el espacio común, el espacio en tab]

  • 1. Ejemplo regex: El dígito
\d

-Explicación 1: Encuentra y selecciona todos los dígitos que existen en cada línea.

  • 2. Ejemplo regex: Tres números (dígitos) consecutivos
\d\d\d

-Explicación 2: Encuentra y selecciona toda vez que existan 3 dígitos consecutivos.

  • 3. Ejemplo regex: A to Z (minúsculas y mayúsculas) y _
\w

-Explicación 3: Encuentra y selecciona todos los caracteres que estén de la A a la Z,
en mayúscula o minúscula, incluidos dígitos y también el guión bajo (_).

  • 4. Ejemplo regex: Espacio en blanco (blank space)
\s

-Explicación 4: Encuentra y selecciona todos los espacios en blanco.

  • 5. Ejemplo regex: Encuentra 4 palabras consecutivas (caracteres)
\w\w\w\w

-Explicación 5: Encuentra y selecciona toda vez que existan 4 caracteres consecutivos,
que sean de la A a la Z, en mayúscula o minúscula, incluidos dígitos y también el guión bajo (_).

  • 6. Ejemplo regex: Encuentra todos los dígitos que estén del 0 al 9, es nuestra primera clase
[0-9]

-Explicación 6: Encuentra y selecciona todos los dígitos que estén del 0 al 9.

  • 7. Ejemplo regex: Encuentra todos los dígitos que estén del 6 al 9
[0-6]

-Explicación 7: Encuentra y selecciona todos los dígitos que estén del 0 al 6.

  • 8. Ejemplo regex: Encuentra todos los caracteres y dígitos y guión bajo de la manera propuesta
[a-zA-Z0-9_]

-Explicación 8: Encuentra y selecciona: Todos los caracteres de la a a la z, de la A a la Z,
los dígitos del 0 al 9, y también el guión bajo.

  • 9. Ejemplo regex: Encuentra los caracteres y dígitos y guión bajo y punto bajo ciertas condiciones
[a-fA-F0-9_\.]

-Explicación 9: Encuentra y selecciona: Todos los caracteres de la a a la f, de la A a la F,
los dígitos del 0 al 9, el guión bajo (_), y el caracter punto (.).

  • 10. Ejemplo regex: Encuentra los caracteres y dígitos y guión bajo y punto bajo ciertas condiciones
[a-fABCDF0-9_\.]

-Explicación 10: Encuentra y selecciona: Todos los caracteres de la a a la f, de la A a la F,
los dígitos del 0 al 9, el guión bajo (_), y el caracter punto (.). (Da el mismo resultado que
el ejemplo anterior).


'
Reto de la clase:
Encontrar los hexadecimales en el archivo propuesto.

Proupuesta:

#\w\w\w\w\w\w

A ver, las representaciones en hexadecimal son de 3 o 6 caracteres para el caso de CSS, iniciando con el símbolo de almohadilla, por lo que grupos menores a 3, grupos de 4 o 5, y grupos mayores de 6 deben ser descartados. Con esas condiciones, e investigando, la REGEX podría ser:
#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})
o
#([A-Fa-f\d]{6}|[A-Fa-f\d]{3})

Aunque también hay que recordar que en ciertos lenguajes de programación, las constantes de números hexadecimales empiezan con 0x, lo cual empieza a complicar las cosas… pero uno se divierte.

yo use esta

/^#?([a-F0-9]{6}|[a-F0-9]{3})$/```

^= the begining of the line
/=delimiters-required for regular expressions
#= number sign(s)
?=followed by zero or one 
{}=then exactly six
|=or
$=and finally the of the line

#[a-f0-9]{6}

Esta es mi solución para colores hexadecimales

#[0-9A-Fa-f]{3,6}

La s es el caracter s, mientras que \s es para los espacios en blanco. La w es el caracter w, mientras que \w es para las letras, dígitos y _.
La d es el caracter d, mientras que \d es para los dígitos.
Sin embargo, el . es refiere a todos los caracteres, mientras que el . es el caracter punto.
Eso fue lo que más confuso me resultó. ¿Por qué no . se refiere a todos los caracteres y . se refiere al punto como tal?

Para encontrar el patron de hexadecimal con 3 o 6 caracteres se puede usar #[a-fA-F0-9]{3,6}

De esta forma se puede expresar la búsqueda sin haber fijado diferencia entre mayúsculas y minúsculas #[0-9a-f]{6}

^\[a-fA-F0-9]{1,6}$
no me funciona?
Para encontrar hexadecimales de colores `[# A-F 0-99]{7}`
Las expresiones regulares son muy utiles para grandes volumenes de archivos los cuales necesiten una limpieza para tomar todos esos datos y usarlos eficientemente.
^\[0-9A-F]+$ Vamos a desglosarla: 1. `^`: Marca el inicio de la cadena. 2. `[0-9A-F]+`: Busca uno o más caracteres que sean dígitos del 0 al 9 o letras de la A a la F (mayúsculas). 3. `$`: Marca el final de la cadena.
**Solución:** \#(\[a-fA-F0-9]{6}|\[a-fA-F0-9]{3}) Es importante considerar que los colores hexadecimales pueden estar compuestos por 6 (notación completa) o 3 dígitos (notación abreviada).
**Character classes:** Alphanumeric characters plus "\_" : \w Digits: \d Whitespace characters: \s **ASCII:** **Examples:** Range of digits: \[0-9], \[0-6], \[3-8] Alphanumeric characters plus "\_": \[a-zA-z0-9\_]
Así entendí el ejercicio... espero este por buen camino: `^[0-9a-fA-F]+$`
excelente video

Les recomiendo esta pagina que es muy buena para practicar ER, ademas tienes un contador de matches lo cual hace que a mi se me facilite mucho : P
https://regex101.com/

Pude llegar a 2 soluciones la primera más “sencilla” pero propensa a escapes de datos es:

[#][0-9A-Fa-f]{6}

Y la segunda solución aplicando clases para asegurarnos que el número sea completo y no solo este dentro de una palabra más grande:

\b[0-9A-Fa-f]+\b

([0-9a-fA-F]{6})

Para los que probaron [A-Z] y [a-z] en VSC y no les funcionó, un tip:

  • Activen la opción “Match Case” es un icono en la búsqueda que es “Aa” o con la tecla Alt+C.

Es un comportamiento raro de VSC, que ya han reportado , pero parece ser que al día de hoy (20/09/22) no han cambiado.

Yo digo que se merece, esta vez VSC una mentada de madre.

La solución en Java se escribe de la siguiente manera

"#([\\dA-F]{1,})"

Solución al reto en Java

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String cs = "abababF110";
        Pattern pattern = Pattern.compile("[\\dA-F]{1,}");
        Matcher matcher = pattern.matcher(cs);
        boolean matchFound = matcher.find();
        System.out.println("string length: " + cs.length());
        if(matchFound) {
            System.out.println("Match found");
            System.out.println("first match: " + matcher.group());
            System.out.println("start index first match: " + matcher.start());
            System.out.println("end index first match + 1: " + matcher.end());
        } else {
            System.out.println("Match not found");
        }
    }
}

/**
 * string length: 10
 * Match found
 * start char first match: F110
 * start index first match: 6
 * end index first match + 1: 10
 */

Es interesante el uso de las expresiones regulares para especifcar los digitos y las letras, hay mucho por aprender y espero que al final el curso cumpla mis espectativas.

Una alternativa al uso de vim para practicar regex es https://regex101.com/
Espero les sea útil

import re

fh = open(r"C:\Users\Alfonso Zapata\jupyter\Cursos\Junio 2022\Curso de expresiones regulares - platzi\REGEX-master\liners.txt", "r").read()

fh

# for line in re.findall("\d", fh):
#     print(line)

line = re.findall("[0-9a-fA-F]{6}", fh) 
print(line)

Mi solución al reto:

^#[a-fA-F0-9]{6}
1
12
123
1234
12345
12345678910
12345678910a
13453243
url: https://www.instagram.com/p/BXB4zsUlW5Z/?taken-by=beco.mx
url: http://instagram.com/p/blablablah
url: http://itam.mx/test
http://instagram.com/p/blablablah
csv1,csv2,csv3,csv4,csv5
Rodrigo Jiménez Gutiérrez
5556581111
56-58-11-12
302-345-9876
esto.es.un.mail+gmail@mail.com
dominio.com
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG ENTRY] [LOG] [user:@beco] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out```

Para encontrar los tipos de hexadecimales: [0-9A-Fa-f]

Usando el código hexadecimals para ascII: [\u0030-\u0039\u0041-\u0046\u0061-\u0066]

Este curso es increíble. El profesor es BUENÍSIMO.

Mi solución al reto de busqueda Hexadecimal

^[a-zA-Z0-9]{3,6}$

Mi aporte con la resolución para encontrar decimales, si hay alguna otra solución más eficiente, no duden en comentar.

/#[a-f0-9]{3}([a-f0-9]{3})?/gi
  • Primero, coloco el michi (#) porque todo hexadecimal comienza con ese caracter.
  • Coloco la fracción [a-f0-9]{3}, la cual significa que busque letras desde la A a la F y números del 0 al 9. Después tiene {3}, que significa que se repite 3 veces. Ya que algunos hexadecimales he visto que lo escriben como #fff o #ffffff.
  • Coloco ([a-f0-9]{3})? que significa lo mismo, la diferencia que lleva paréntesis para agruparlo y colocar al final el signo de interrogración (?), lo cual significa que es opcional.
  • Por último, lleva las letras gi, la g significa global, y la i nos ayuda para el case-sensitive.

.
Ese sería mi aporte, muchas gracias 😄

Imagina que quieres buscar las direcciones de memoria ( printf("%p",puntero) ) que genera una salida de puntero en C.
Tipo…

Reserva de memoria(en &n=0x7ffea9beb0c0) 
  el nodo 0 con dir 0x555d9d17c2b0                                                   
   &n->next=0x555d9d17c2b8                                       
  n=0x555d9d17c2b0  &n=0x7ffea9beb0f0   

Solucion:
/0x[0-9a-fA-F]*
" 0x " : caracteres de inicio de la cadena
" [0-9a-fA-F] " : rango de caracteres esperados después del inicio
" * " Repite el rango (sin " * " solo buscaría el primer carácter contiguo a " 0x " )

reto hexadecimales encontrados
link

Siguiendo hasta lo que hemos visto en la clase, seria de esta manera, se que se pueden indicar las repteciiones con {n,n} pero aun no llegamos a eso

[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]

Quedo izi pizi


[a-fA-F1-9]{6}

Más adelante en el curso, espero aprender a hacer que antes de esta expresión, pueda ser un # o nada. Ojala encuentre la forma 😄

Mi solucion quedo de la siguiente forma:

[#][0-9a-fA-F]{6}

#: el caracter con el que inicia
0-9: el rango de numeros
a-f A-F: las letras que puede tener
6: la longitud de caracteres

Mi pequeña aportación
/[a-fA-F0-9]{6}

Tengo una duda compañeros y profe, no se si sea observación o corrección. Si usamos el carácter carácter ‘.’ (cualquier carácter) dentro de una función [] no es necesario escaparlo como lo hace el profe en el ejemplo.
Es decir así: [a-fABCDEF0-5_.]
o así: [.]
Recupera todos los ‘.’

Miren este “chorizo”
[a-zA-Z_{}0-9 [.]😕/-?+@,-ñ]

😛😛😛

Si bien los colores con el formato #fff se pueden interpretar, al final el formato interpretado es de #ffffff por eso hice el reto de esta forma #[0-9A-Fa-f]{6}[\n\s;]

[a-fA-F0-9]

Las expresiones regulares son escencialmente las mismas en los distintos lenguajes de programación. Aunque pueden haber algunas diferencias.

  • \d -> Encuentra todos los dígitos
  • [0-9] Es más potente para buscar dígitos (podemos específicar entre qué números buscar)
  • \w -> “All word characters”, de la aA a la zZ y el guión bajo
  • \s -> Encuentra todos los espacios

Hagamos algo más complejo y poderoso: [a-zA-Z0-9_\.] -> Encuentra letras en mayúsculas y minúsculas, además, números y también el caracter punto. De la ‘a’ a la ‘z’, en mayúsculas y minúsculas.

Expresión regular para encontrar valores hexadecimales: #[a-fA-F0-9]{3,6} -> Empieza con ‘#’, tiene letras de la a a la f en mayúsculas y minúsuclas, del 0 al 9 y entre 3 y 6 dígitos.

Mi solución:

^#[0-9a-fA-F]{3,6}$

Lo malo es que toma también los de 4 y 5 dígitos, no solo los de 3 y 6

Algo rarísimo es que en la consola de ubuntu si jala cuando yo hago el \w pero no cuando hago el \d, alguien sabe porque?

/////////////////////////////////////////////////////////////////////////////////
///////////////////// Las clases predefinidas y construidas /////////////////////
/////////////////////////////////////////////////////////////////////////////////

// Dígitos: '\d'

var e = /\d/; // Me encuentra todos los dígitos individualmente

var e = /\d\d\d/; // Me encuentra 3 dígitos juntos

var e = /[0-9]/ // Esto es equivalente a '/d' porque 0-9 son todos los dígitos

var e = /[2-8]/ // Me encuentra todos lso dígitos del 2 al 8

var e = /\D/; // Me encuentra todo lo contrario a un dígito

// Palabras: '\w', Incluyen los dígitos, letras minúsculas y mayúsculas y guien bajo '_' excepto los acentos

var e = /\w/; // Me encuentra todo lo que pueda ser parte de una palabra

var e = /\w\w\w/; // Me encuentra 3 caracteres juntos parte de una palabra

var e = /[a-zA-Z0-9_]/; // Esto es equvalente a '\w'

var e = /[a-z]/; // Me encuentra todas la letras minúsculas

var e = /[A-Z]/; // Me encuentra todas la letras mayúsculas

var e = /[e-m]/; // Me encuentra todas la letras desde la 'e' hasta la 'm'

var e = /\W/; // Me encuentra todo lo contrario a lo que pueda ser parte de una palabra
var e = /[a-tA-F0-5\.]/; // Aquí agregamos '\.' para decir que también seleccionaos el caracter '.'
// 'A-F' es equivalente a 'ABCDEFG' pero si queremos ser específicos con ciertas letras como por ejemplo:'ACFGY'
// '2-5' es equivalente a '2345' pero si queremos ser específicos con ciertos números como por ejemplo: '1587'

// Espacios: '\s'

var e = /\s/; //Me encuentra todos los espacios individualmente

var e = /\S/; // Me encuentra todo lo contrario a un espacio

La expresion para los hexadecimales seria:

^[0-9a-fA-F]{6}```


Quisiera compartir tambien un link para el que le interese investigar un poquito mas sobre las expresiones regulares, lo encontre muy interesante: https://baulderasec.wordpress.com/desde-la-consola/shell-en-unixlinux-sh-ksh-bash/6-expresiones-regulares/

Codigo en java

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package strings;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
*

  • @author Sem-6-INGENIERIAINDU
    */
    public class Strings {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      String mensaje = “Hola como te encuentras sofia 22”;
      Pattern pattern = Pattern.compile("\d");
      Matcher matcher = pattern.matcher(mensaje);
      while (matcher.find()) {
      System.out.println("° número: " + matcher.group());
      }

    }

}