No tienes acceso a esta clase

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

Los delimitadores: +, *, ?

7/29
Recursos

Aportes 96

Preguntas 18

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Acordeones finales del curso

Hice estos apuntes de lo que entendí a mi parecer hasta ahora y pude probar en https://regex101.com/
Espero que a alguien como yo, que vio el vídeo como 3 veces para comprender el uso de los delimitadores, le pueda ayudar 😃

Existen sitios donde se puede ver de forma gráfica la expresión regular:
-Jex Regulex
-Regexper
-Debuggex

Por ejemplo el ejercicio realizado en esta clase se vería así en https://jex.im/regulex/:

Recomiendo esta lectura Denial of Service, para cuando diseñen un regex y evitemos las vulnerabilidadescomo por ejemplo el ataque Denial of Service - ReDoS.

6. Mis apuntes sobre: "Los delimitadores: +,*,? "

Resumen hasta hoy#p132:
\w - caracteres de palabras
\d - dígitos
\s - espacios/invisibles en blanco
[0-9] ~ \d
[0-9a-zA-Z_] ~ \w
* - greedy - todo
+ - uno o más
? - cero o uno, en otro contexto (Sean los menos posibles)

  • 1. Ejemplo regex:
.*

-Explicación 1: Encuentra un caracteres y sigue seleccionando hasta el final de la linea.
’
’

  • 2. Ejemplo regex:
\d+

-Explicación 2: Encuentra un dígito, luego 1 o más hasta que no haya.
’
’

  • **3. Ejemplo regex: **
\d*[a-z]

-Explicación 3: Encuentra y selecciona: Toda vez que se inicie o no con un dígito,
y siga y termine con una letra de la a a la z.
’
’

  • 4. Ejemplo regex:
\d*[a-z][a-z]?

-Explicación 4: Encuentra y selecciona: Toda vez que haya o no un dígito, luego
haya una letra de la a a la z, y luego haya o no una letra.
’
’

  • 5. Ejemplo regex:
\d*[a-z]?s\d*

-Explicación 5: Encuentra y selecciona: Cero o muchos dígitos, y cero o una letras de la
a a la z y una letra ‘s’ y cero o muchos dígitos.
’
’

+ --> 1 o más.
Incluye solo si aparece este dato

*--> 0 o más
No importa en sí, pero estaría bueno que sí lo encontraras sin importar cuantas veces te salgan.

? --> 0 o 1 vez.
No importa si no lo encuentras, pero si lo haces, SOLO ME SIRVE UNA VEZ, el resto está de más.

\w - caracteres de palabras
\d - digitos
\s - espacios/invisibles en blanco
[0-9] ~ \d
[0-9a-zA-Z] ~ \w

  • greedy - todo
  • uno o mas
    ? cero o uno
    \d*[a-z]?s\d*

Tendiendo el patrón que usa Beco:

\d*[a-z]?s\d*

No entiendo porque encuentra el fragmento “sys” de la palabra system.

Según entiendo:

  1. Busca cero a mas dígitos.
  2. Busca cero o una letra (solo una vez) entre la a-z.
  3. Seguido de lo anterior debe existir de manera obligatoria la letra “s”.
  4. Nuevamente cero o mas dígitos.

Por lo que en la palabra “system”:

  1. No encuentra ningún dígito.
    2 y 3) Encuentra la letra “y” antes de la letra “s”.
  2. No encuentra ningún dígito.

No debería solo marcar “ys” en la palabra “system”. No entiendo esa parte.

Cuantificación en expresiones regulares:
? -> El signo de interrogación indica que el carácter que le precede puede aparecer como mucho una vez. Por ejemplo, “ob?scuro” se corresponde con oscuro y obscuro.
+ -> El signo más indica que el carácter que le precede debe aparecer al menos una vez. Por ejemplo, “ho+la” describe el conjunto infinito hola, hoola, hooola, hoooola, etcétera.
* -> El asterisco indica que el carácter que le precede puede aparecer cero, una, o más veces. Por ejemplo, “0*42” se corresponde con 42, 042, 0042, 00042, etcétera.

Recomiendo el siguiente website para seguir y entender mas claro como funcionan las REGEXR

Regex Qué hace Descripción
. 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].
/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_].
/s Space WhiteSpaces, Encuentra todos los espacios (los saltos de línea y tabuladores también son espacios).
[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
* Greedy Agrupa el conjunto de caracteres (la búsqueda) (0 o muchas)
+ 1 o más Deben aparecer (debe aparecer uno o más)
? Puede o no haber

Todo es potente

Aqui hay una pagina que permite ver de manera grafica todo esto
https://jex.im/regulex/#!flags=&re=^(a|b)*%3F%24
espero les sirva

Por qué cuando yo pongo [a-z] también encuentra las mayúsculas?

Esto se va a descontrolaaaaaaaaarrrrr.

Interpretar la presencia de los delimitadores en las expresiones puede suponer cierta dificultad, por tanto les comparto la manera que se me ha facilitado interpretalas, que consiste en leer la expresion regular de derecha a izquierda lentamente, de forma inversa a la habitual.

espero les pueda ayudar.

Se nota que mejoro bastante la forma de enseñar! Sumando también que nos brindan el material para practicar, y ahora el profesor es mas pausado al momento de explicar. Genial!! 😃

estuvo un poco omplicado esta clase, tuve q pausarb el video y ir practicando yo mismo para poder entender,

Se nota la buena energia que le pone el profe, pero termina haciendo parecer el tema peor de lo que es…

Venía de esta clase : https://platzi.com/clases/1468-bash-shell/16970-expresiones-regulares/
Dónde están las descripciones de los criterios de las expresiones regulares… así nomás:

*.- Caracter que representa cero o más ocurrencias de la expresión

+.- Caracter que representa una o más ocurrencias de la expresión.

{n}.-Representa n veces de una expresión.

[ ] .- Representa un conjunto de caracteres, por ejemplo: [a-z] representa las letras del abecedario de la a a la z.

bueno acá después de 7 clases me han quedado claras 😃 , gracias!!

Son bastante útiles estos delimitadores para organizar las cadenas de caracteres que van a ser ingresadas en una barra de búsqueda o un segmento de un formulario.

No me quede muy claro la diferencia entre * y ?. Solo la parte que los dos son opcionales al momento de crear una expresión

*Los delimitadores: +, , ?

* → Haya o no haya [Seleccionar todo, operador greedy]

Ejemplo: \d*[a-tA-T]

Se lee: Seleccione el carácter que se encuentra en el rango de la a a la t, (Tanto minúsculas como mayúsculas) y TODOS los números que lo preceden, EXISTAN O NO.

Así, del siguiente ejemplo seleccionará

12345Texto
12345 Texto


+→Haya uno o más [Debe haber]

Ejemplo: \d+[a-tA-T]

Se lee: Seleccione las secuencias de caracteres que contengan AL MENOS UN dígito, seguido de un carácter que se encuentre en el rango de la a a la t, (Tanto minúsculas como mayúsculas).

Así pues, del siguiente ejemplo seleccionará

12345Texto
12345 Texto


?→Haya cero o uno (Puede haber sólo uno)

Ejemplo: \d?[a-tA-T]

Se lee: Seleccione las secuencias de caracteres QUE CONTENGAN O NO, UN SOLO dígito, seguido de un carácter que se encuentre en el rango de la a a la t, (Tanto minúsculas como mayúsculas).

Así pues, del siguiente ejemplo seleccionará

12345Texto
12345 Texto


Ejemplo complejo: \[[a-zA-Z]*:[email protected]+[a-zA-Z]*\]

Se lee: Seleccione las secuencias de caracteres que:

  • Comiencen con el carácter especial [
  • Seguidamente contengan, o no, una secuencia de letras tanto minúsculas como mayúsculas.
  • Seguidamente contengan, o no, un solo carácter :
  • Seguidamente contengan al menos un @
  • Seguidamente contengan, o no, una secuencia de letras tanto minúsculas como mayúsculas.
  • Finalicen con el carácter especial ]

Así pues, del siguiente ejemplo seleccionará

[LOG ENTRY] [LOG] Everything is OK
[LOG ENTRY] [LOG] [:@beco] Logged in
[LOG ENTRY] [LOG] [USER:@beco] Clicked here
[LOG ENTRY] [LOG] [[email protected]@@@] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG ENTRY] [LOG] [user:beco] test

¿Cuantas veces debe aparecer o puede aparecer?

+ - debe aparecer porque es uno o más veces

* - puede aparecer, 0 o muchas veces

? - puede aparecer, 0 o 1 veces

Las expresiones regulares son muy potentes creando soluciones escalables y reutilizables para el manejo de textos.

Expresiones mucho muy potentes !!

Si están usando Linux o algo similar y no pueden hacer lo que hace el profe, lo que necesitan es ponerle una bandera el comando grep. Esta bandera es -E y ya con esto ustedes podrán hacer las cosas mágicas que hace el profe

Hola, tengo esta E.R pero no me coge los primeros números de la primera línea:

\d{2,2}[.- ]*\W

Me pueden ayudar por fa que me hace falta

Algo asi lo entendi…

creo que un buen ejemplo para el cuantificador + (que exista 1 o mas veces) es el siguiente:

encontrar las palabras que terminen con a, por ejemplo, entonces, la construcción sería:

encontrame cualquier cantidad ocurrencia de palabras

\w*

y que despues tengan al menos 1 a

a+

y luego tenga un caracter diferente a [a-zA-Z0-9], es decir espacios en blanco, coma, punto lo que sea usamos el NOT A WORD \W

\W

entonces quedaria:

\w*a+\W

waaaawww, 😄

Entonces los delimitadores van del lado derecho de la expresión y se leen de derecha a izquierda.
Ejemplos:

  • \d* → 0 o más dígitos.
  • [a-z]? → 0 o 1 letra minúscula.
  • \s+ → 1 o más espacios.

plagio en Perú.

El caracter (.): Encuentrame todo lo que sea un carácter
Dígitos:\d Encuentra todos los dígitos de 0 a 9.
[0-2] nos encontrará solamente los dígitos de 0 a 2.
() : Cero o más veces
(?): Cero o una sola vez
(+): una o más veces.
[a-z]? : Esto es que puede estar una sola vez o no estar una letra minuscula de la (a) a la (z).
\d
: Esto es que puede estar muchas veces o no estar un digito.
\d+: Esto es que puede estar muchas veces o una sola vez un digito.
\w caracteres de palabras
\d caracteres de dígitos
\s Espacios en blancos e invisibles

\w caracteres
\d dígitos
\s espacios
[0-9] ~ \d
[0-9a-zA-Z_] ~ \w
greddy - todo - cero o muchas -> *
uno o más -> +
cero o uno -> ?
.* -> encuentra todos los caracteres
\d* -> encuentra todos los dígitos
\d+ -> encuentra uno o mas
\d? -> cero o uno
\d+[a-z] tiene que haber un dígito antes de las letras
\d*[a-z] tiene o no que haber números antes de las letras

( * ) Todo. Cero o muchos. El profe dice 0 o 1

. :* Encuentra todos los caracteres que se sigan desde cero o ninguno. No importan si son numéricos, palabras o símbolos.

+: Encuentra 1 o mas, 1 o todos.

? : Encuentra cero o un carácter.

\d+[a-z]: Encuentra todos los dígitos pero que al final debe tener una palabra.

\d[a-z]:* Debe de haber letras pero puede que tenga o no tenga digito

\d[a-z]?s:* Encuentra todos los dígitos pero que a su vez tengan un carácter y que este carácter termine con la letra s

entonces el operador afecta directamente el contenido que tenga declarado a su izquierda?

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)

line = re.findall("[\d*]{5}", fh) 
print(line)

line = re.findall("\d*[a-z]s\d*", fh) 
print(line)
* => puede ser que tenga o no tenga
+ => si o si tiene que tener.

Me costo un poco internailzar las funcionalidades de

  • , +, ?
    Avanzando al video - > 8

super interesante clase, me está siendo de mucha utilidad

Hola Profe. Me gustaria preguntarte a ti, el equipo Platzi o a la comunidad, cual es la Biblia de Rgex? Cual sería una buena referencia de consulta para cuando toca sentarse a pensar y diseñar una expresión regular.

Saludos

Para los que quieran trabajar esto en la consola, aquí les dejo un articulo que habla de ello https://platzi.com/tutoriales/1301-expresiones-regulares/9434-delimitadores-en-consola-linux/

Codigo de d

/*

  • 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("\w");
      Matcher matcher = pattern.matcher(mensaje);
      while (matcher.find()) {
      System.out.println("° número: " + matcher.group());
      }

    }

}

Resultado

Solución
(\d{2,2}[^a-z]?)+

Delimitadores
Se usan en combinación con las clases mencionadas

    • => Permite buscar, cero (0) o más coincidencias
    • => Permite buscar, una (1) o más coincidencias
  • ? => Permite buscar, cero o solo una coincidencia

Delimitadores
Se usan en combinación con las clases mencionadas

  • * => Permite buscar, cero (0) o más coincidencias
  • + => Permite buscar, una (1) o más coincidencias
  • ? => Permite buscar, cero o solo una coincidencia

Entonces que es un delimitador?

^[\w.][email protected]\w+.\w+.\w+$
tengo esta expresión para encontrar correos válidos. Lo que no comprendo es por qué funciona también para correos como [email protected]
Si mi estructura es inicia en [palabra y puntos]mas de uno seguido de [ @ ], seguido de [palabra] mas de uno, seguido de [ . ], [palabra] mas de uno, y por último [palabra] más de uno.

Mi solucio definitiva del reto:

^#(?:[0-9a-fA-F]{3}){1,2}$

Apuntes:

*Los delimitadores: +, , ?

Tipos básicos de conteo: que exista, que no exista.

( * ) Todo.
( + ) 1 o más.
( ? ) Cero o uno.

Respuesta a:
Los delimitadores: +, *, ?
Expresiones regulares:
\w- caracteres de palabras
\d- dígitos
\s- espacios
\t - Tabulador
. - Encuentra todo carácter

  • encuentra todo
  • encuentra uno o más
    ? cero o uno

[] =rango

  • = 0 o muchos(todo)
    ? = uno o ninguno
  • = 1 o mas

Cuando concateno los delimitadores +* da error, sin embargo cualquiera de estos dos combinan con ?, es decir +? o *?, de forma que el ? pierde el sentido.

Apuntes:
Ser específicos con las expresiones regulares (tener cuidado)

  • es el que encuentra todo tipo de carácter (numérico, letra, símbolo)
  • te trae uno o más
    ? cero o un dígito
    . cualquier carácter
    \w caracteres de palabras
    \d dígitos
    \s espacios/invisibles en blanco
    [0-9]
    [0-9a-z-A-Z]

Expresiones regulares:
\w- caracteres de palabras
\d- digitos
\s- espacios

    • encuentra todo
      ± encuentra uno o más
      ? cero o uno

se ve muy interesante

Muy poderoso

Excelente.

genial

con estos delimitadores se entiende mucho mejor el curso de linea de comandos, gracias

EL curso de Linea de comandos me dirigió a este curso justo para esta clase… Debo aceptar que está superando mis expectativas, no sabía la importancia que tenía y lo POTENTE que es conocer sobre regex… Me encantan tus clases, Beto.

Dado este dato:
8589sA


que resultado final se espera con la siguiente expresion:


\d?[a-zA-Z]s


a) 8589s
b) 8589sA
c) 9s
d) 59sA


Comenten su respuesta 😃

.* es como el shortkey CTRL + A

Muy Bueno los delimitadores

Resumiendo:

  • ~ 1 o más
  • ~ 0 o muchos
    ? ~ 0 o 1

los saltos de linea es \n

Hay que pararnos a diseñar la solución con expresiones regulares. Esta es la parte clave para usar esta poderosa herramienta.

Para hexadecimales
Con case-sensitive - (\(x|X)|0(x|X))[a-fA-F\d]+
Sin case-sensitive - (\x|0x)[a-f\d]+

Delimitadores

  • *: Any repetitions
  • +: Minimo una repeticion
  • ?: Cero o uno
* Busca 0 a todos
+ Busca 1 a todos
? Busca 0 a 1

Hasta donde voy aprendiendo, es una manera dinámica de encontar cosas. Ya me agradó mucho todo esto

muy claro

*: Cero o más veces.
+: uno o más
?: Cero o una sola vez.

Me costo entender la diferencia entre * + y ? pero dentro mi explicación a la expresión regular creada en clase:

El * sería como "Opcional"
El + sería como "Mínimo uno"
El ? sería como “Uno o nada” (Osea opcional también)

Les recomiendo mucho esta pagina. En sencilla y tiene documentación:
url: https://regexr.com/

O sea:

  • –> es distinto a 1
  • –> existe
    ? puede estar o no estar

Interesante clase, me ha encantando, he aprendido mucho. #NuncaParesDeAprender

Vengo del futuro. Las expresiones regulares los van a salvar de muchos apuros… No las subestimen, en ocaciones futuras vendrán a ver el curso de nuevo como yo

Es cierto que es muy potente, es un hecho

Wow esta ya se esta poniendo interesante!

Me tomo dos días entender todo lo que se explica en este video

Puede o no aparecer lo buscado: * cero o mas veces ? cero o una vez

Debe aparecer lo buscado: + una o mas veces

Noté que usando \d. resalta también singos como el de pregunta (?) o el del dólar ($)

/////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Los delimitadores: +, *, ? //////////////////////////
/////////////////////////////////////////////////////////////////////////////////

// Repaso:
// \d: dígitos
// \w: caracteres de palabras
// \s: espacios o invisibles en blanco
// [0-9] ~ \d
// [a-zA-Z0-9_] ~ \w

// Dentro de los contadores también existen caracteres que facilitan el conteo de las incidencias
// estos también se conocen como delimitadores


// *: cero a muchos. Es decir que encuentra absolutamente todo. Puede no estar o estar muchas veces
// +: uno a muchos. Es decir que encuentra por grupos. Puede estar una vez o muchas veces
// ?: cero a uno. Es decir que encuentra cada caracer individual. Puede estar o no estar

// Ejemplos:

var e = /\d+[a-z]/; // Encuentra uno más digitos que termine en un caracter de palabra

var e = /\d*[a-z]/; // Encuentra cero o muchos digitos que termine en caracteres de palabra

var e = /\d?[a-z]/; // Encuentra cero o un digito que termine en caracteres de palabra

var e = /\d*[a-z]?s/ // Encuentra una cadena que puede tener o no muschos dígitos, seguido
                     // una letra o no y seguido de una s obligatoria.

Delimitadores

    * cero o más, nos va a contar espacios en blanco y nuevas líneas
   + uno o más, no va a contar nuevas líneas o espacios en blanco
   ? Cero o una solo vez nos va a contar espacios en blanco y nuevas líneas
 
      Para entender mejor sería bueno que buscaras las cosas usando los delimitadores y remplaces el texto y veas como cambiando usando los diferentes delimitadores
 
Nota: Debe de ir a la derecha de nuestra clase (predefinida o declarada)

Nota: Ten cuidado al usarlo puedes delimitar tu rango de búsqueda.

Este curso de momento ha sido mi favorito. Cuando Hace 6 meses no sabíia ni qué era un terminal y hoy estoy comprendiendo líneas de comandos “sin sentido”. 💚

Minuto 16:57 para todos los que filtraban la información en excel a base de formatos condicionales y búsquedas para reemplazar todo.