No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Los delimitadores: +, *, ?

7/29
Recursos

Aportes 115

Preguntas 23

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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/:

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, 鈥渙b?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, 鈥渉o+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.

+ --> 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.

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

Tendiendo el patr贸n que usa Beco:

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

No entiendo porque encuentra el fragmento 鈥渟ys鈥 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 鈥渟鈥.
  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 鈥測鈥 antes de la letra 鈥渟鈥.
  2. No encuentra ning煤n d铆gito.

No deber铆a solo marcar 鈥ys鈥 en la palabra 鈥system鈥. No entiendo esa parte.

Esto se va a descontrolaaaaaaaaarrrrr.

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

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 鈥榮鈥 y cero o muchos d铆gitos.

\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*

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

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

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.
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

驴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.

Les recomiendo practicar en esta web donde hay lecciones.

Algo asi lo entendi鈥

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

  • Debe aparecer

    + : 1 o mas caracteres
    
  • Pueden aparecer

     * : 0 o muchas . 
    
    ? : 0 o 1 caracter
    

*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


+鈫扝aya 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


?鈫扝aya 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

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

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 es mucho pero estoy contento por que lo hice yo solo.
++^[email protected]+鈥+ ++
quice hacer una expresion para buscar correos electronicos.

cabe resaltar que que el caracter (.) hace match con todo excepto con los cambios de linea.

Por si les sirve.

que potente

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

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, 馃槃

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

. :* 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?

NO se entiende lo que explica, creo que requiere ejemplos mas especificos

El signo de interrogaci贸n ? es como un operador de disyunci贸n ?

Regexr nos puede ayudar al observar, revisar y crear expresiones regulares

Brutal!!

Que potencia de clase.

El signo ? es como un operador de disyunci贸n ?

Se empieza a ver la potencia de las expresiones regulares.
.
Solo con esto, ya puedo buscar nombres de archivos complejos con Adobe Brigde.

Mal explicada esta clase.

La implementaci贸n del primero en Java es de la siguiente forma:

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

public class Main {
    public static void main(String[] args) {
        int i = 1;
        String cs = "12345a\n12345\nabc\n123a456";
        Pattern pattern = Pattern.compile("(\\d*)[a-z]");
        Matcher matcher = pattern.matcher(cs);
        boolean matchFound = matcher.find();
        System.out.println("string length: " + cs.length());
        if (!matchFound) System.out.println("Match not found");
        while (matchFound) {
            System.out.println(String.format("%d. %s", i, "match: " + matcher.group()));
            System.out.println("index: " + matcher.start());
            System.out.println("end index + 1: " + matcher.end());
            System.out.print("\n");
            matchFound = matcher.find();
            i++;
        }
    }
    
}

// Output
/**
 * string length: 24
 * 1. match: 12345a
 * index: 0
 * end index + 1: 6
 *
 * 2. match: a
 * index: 13
 * end index + 1: 14
 *
 * 3. match: b
 * index: 14
 * end index + 1: 15
 *
 * 4. match: c
 * index: 15
 * end index + 1: 16
 *
 * 5. match: 123a
 * index: 17
 * end index + 1: 21
 */

Acordeon.md nos muestra el resumen de las expresiones regulares vista hasta la clase 7

Es interesante el uso de los delimitadores para usarlos en las expresiones regulares, ya lo estoy entendiendo.

wowwww se siente bien entender esto, aunque un poco intimidante jaja

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 = 鈥淗ola 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.