No tienes acceso a esta clase

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

B煤squeda y reemplazo

19/29
Recursos

Al igual que una navaja suiza, las expresiones regulares son una herramienta incre铆blemente 煤til pero tienes que darle la importancia y las responsabilidades adecuadas a cada una, ya que no son la panacea, no solucionan todos los problemas.

El uso m谩s conveniente de las expresiones regulares es buscar coincidencias o matches de cadenas en un texto, y si es necesario, reemplazarlas con un texto diferente.

Aportes 182

Preguntas 11

Ordenar por:

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

o inicia sesi贸n.

驴Han notado que las expresiones regulares pueden ser 鈥渕alas palabras鈥 en algunos comics?

Nah, lo del reemplazo a JSON me volo la mente. Siento que se me abrio el tercer ojo.

(Como dato perturbador) :: Esta es la ultima clase que se hizo el mismo d铆a a juzgar por la ropa que lleva Beco, entonces beco sabe, TANTO, que logr贸 hacer 20 temas! en un solo d铆a, mis respetos Beco

Expresi贸n sencilla

^\d+::(.*)\s\((\d{4})\)::.*$

Cuando por fin dominas las expresiones regulares

Practicar jugando en

Resumen de la clase:

.
Se pueden generar grupos al utilizar par茅ntesis 鈥()鈥, cada uno de esos par茅ntesis a la hora de reemplazar podemos acceder a el valor dentro del grupo con la variable $1, $2, $n, por ejemplo:
.
Find:

  ^\d{1,5}+::([\w\s:,\)\(\.\'\-\&\!\/?]+)\s\(\d\d\d\d\)::.*$

Replace:

`insert into movies (year, title) values ($2, '$1');`

.
Ac谩 la data para que jueguen https://regex101.com/r/pNKl25/3

Es un verdadero placer cognitivo entender esta clase, de verdad sientes como si adquirieras un nuevo s煤per poder.

Si quieren practicar lo aprendido en el curso, puede ser 煤til: https://regexone.com

Esto s铆 me vol贸 la cabeza鈥 Incre铆ble tu clase Beto, muchas gracias鈥
Aqu铆 dejo la expresi贸n l贸gica que use para buscar en todas las l铆neas sin excepci贸n鈥

隆Que potencia se帽ores! 隆pero que potencia! me eeeencanta

Buenas compa帽eros, al que le este agarrando dos lineas al momento de establecer los parentesis, deben hacer la expresion lazzy en el primer grupo, como se establece a continuaci贸n:

<^\d+::([\w\s,:'\.&\!\-\(\)\/\?\*\$\;\#]+?)>

Wow!, esta es la aplicaci贸n m谩s potente que he visto. Con esto ya no tendr茅 que utilizar CONCAT de excel. Lo usaba para crear querys con estructura WHERE IN (id1,id2,鈥dn) donde los ids provenian de un archivo csv.

Si siguen este curso desde VS Code, 隆encontr茅 una extensi贸n buen铆sima! Se llama: Regexp Explain
Escriban su expresi贸n regular, selecci贸nenla con el mouse, click derecho, explicar regex y ver谩n c贸mo es que est谩 funcionando. Me sirvi贸 mucho para entender esta clase.
Respecto a $1,$2, puedo entender que hicimos un: 鈥淐onserva solamente la informaci贸n del grupo 1 y del grupo 2鈥

Buscar y reformatear movies.csv a json, manteniendo los g茅neros:

Find: ^\d+::(.*) \((\d{4})\)::([\w\-]*)\|?([\w\-]*)\|?([\w\-]*)\|?([\w\-]*)\|?([\w\-]*)
Replace: {title: '$1', year: $2, genres: {$3, $4, $5, $6, $7}}

Find: (, ){2,}

Replace:

Find: , }}

Replace: }}

Wooooooooooooowwwwwwwwwww!!! 馃く馃く馃く

La magia existe鈥e llama expresiones regulares

Les dejo la RegEx que us茅 para encontrar todas las l铆neas sin excepci贸n:

^\d+::(.+[^\s])\s?\(([\d]{4})\)::.*$

Y la f贸rmula para crear un JSON ordenado:

{\n  movie: '$1', \n  year: $2, \n},

Quedar铆a as铆:

La regex que selecciona todas las l铆neas:

<code> 
^\d+::([\w :,\(\)'\.\-&驴?隆!\/谩茅铆贸煤芒盲枚眉酶脿猫矛貌霉氓芒锚卯么没莽脕脡脥脫脷脌脠脤脪脵陆+鲁忙*$]+)\s\((\d\d\d\d)\)::.*$
</code>

Coincido con todos mis compa帽eros en esta clase: BRUTAL!. Ahora es casi tangible la utilidad de las Expresiones Regulares.

Archivo no apto para procesadores core i3 馃槮

Si uno hubiera hecho antes el curso de fundamentos de base de datos antes de este curso, esta explicacion no me hubiera volado la cabeza.
Excelente clase

Tremenda clase, cuanto poder en las expresiones regulares鈥 y yo que las odiaba 馃槢

Esta expresi贸n toma todas las l铆neas y sirve para hacer las sustituci贸n correctamente :

^\d+::(.*)\s\((\d{4,4})\)::.*

ahora, hay problemas con el hecho de que sea tan general?

T铆tulos de pel铆culas para practicar regex

Las expresiones regulares son una excelente navaja suiza, pero NO solucionan todos tus problemas.

  • () -> Sirven para agrupar.

Para el archivo de movies.txt: ^\d+::([\w\s:,\(\)'\.\-&!\/]+)\s\((\d+)\)::.*$ -> Empieza con un n煤mero que puede estar una o m谩s veces, sigue con 鈥::鈥, tenemos el primer grupo, corresponde a palabras con espacios y :,()'-&!/ una o m谩s veces, luego un espacio, tenemos el segundo grupo que tiene un d铆gito que debe estar una o m谩s veces, luego 鈥::鈥 y al final lo que sea.

Incre铆ble la clase

Para un json
search: ^\d+:馃槮.+)\s?((\d{4,4})):馃槮.)$
replace: {鈥渢itle鈥: 鈥$1鈥, 鈥測ear鈥: $2, 鈥渃ategory鈥: ["$3"]},
search: ["(.
)(|)(.*)?"]
replace(x5): ["$1","$3"]
solo faltaria poner
{鈥減elis鈥: [ al inicio
]} al final del archivo
y eliminar la ultima coma

asi me quedo:
^\d+:馃槮[\w陆-枚酶-媒\s,.鈥"&:-隆!()[]+/$?鲁陆#掳@路]+)\s((\d\d\d\d))::.$

Este art铆culo me sirvio para comprender los rangos asignados para vocales acentuadas en conjuntos regex.
https://es.stackoverflow.com/questions/117556/clase-de-caracteres-para-cualquier-letra-incluyendo-todo-tipo-de-acentos

^\d+::([\w\s:,\(\)\.'茅猫\-脌没卯锚么贸铆&!茫\*\?]+)\s\((\d{4})\)::(([\w\-']+[\|]?)+)$ - Permitiendo con $3 obtener las categor铆as

Ejercicio con el archivo de movies.dat para convertirlo en un json:
1 Primero busque los ( | ) para sustituirlos por ( , )
2 Desp煤es meti esta regex para abarcar la linea completa y separar tres grupos:

^\d+::(.*)\s\((\d{4,4})\)::(.*)$

3 Por ultimo reemplace por esto:

{title:"$1", year:$2, categories:[$3]}

4 Obteniendo como resultado un json con estas lineas:

{title:"Ace Ventura", year:1994, categories:[Comedy, Children]}

Este programa es muy 煤til para saber, por ejemplo, cu谩les pel铆culas son de 1994, solo es pasar la regex correcta por par谩metro.

 public static void lineMatches(String sPath, Pattern pattern){
        Path filePath = Paths.get(sPath);
        AtomicInteger total = new AtomicInteger();
        AtomicInteger matchs = new AtomicInteger();
        try (Stream<String> stream = Files.lines(filePath)) {
            stream.forEach(line -> {
                if (pattern.matcher(line).find()){
                    System.out.println(String.format("%d. %s", matchs.get()+1, line));
                    matchs.getAndIncrement();
                }
                total.getAndIncrement();
            });
            System.out.println(String.format("Total: %d, Matchs: %d, AllMatch: %b", total.get(), matchs.get(), total.get()==matchs.get()));
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

Maravillosa clase.

QUED脡

Wow鈥 馃く

Mi aporte hecho por mi cuenta:

Code:

^(.*)::(.*)\((\d+)\)::.*$

lo estoy usanfo en atom, y escribo la misma epresion y no me funciona correctamente , coge 2 lineas en algunos casos,
lo q me funciono fue esto .

^\d+::(.*)\s\((\d\d\d\d)\)::.*$

Flipando estoy!!!

Jajaja php ya se puede considerar una tecnolog铆a obsoleta???

Esta clase deber铆a llamarse, Como volarte la cabeza con Expresiones Regulares

Para el de 10,000 lineas!

^\d+::([\w :,\(\)\.'谩-媒\-&\/盲-每脛-鸥莽脟脿-霉!\?#路\*脌-脵\[\][鲁虏隆\+@"陆\$驴掳]+) (\(\d{4,4}\))::.*$

Demasiado brutal!! 馃槷

(\d{1,}):馃槮\w.)((\d{4})):馃槮.)
$1 -n煤mero-
$2 -pel铆cula -
$3 -a帽o-

num 63468 pel Restaurant  a帽o 1998
num 63479 pel Sex Drive  a帽o 2008
num 63481 pel Soul Men  a帽o 2008
Mi soluci贸n ```tsx `^\d+::([\w\s,!#$*;?/\-\(\):'\.&]+)\s?\((\d\d\d\d)\)::.*$` ```

Quiero dejar bien en claro, yo no tengo filtros de Pandas en mi computadora, solo uso expresiones regulares 馃槂)))))

reemplazar en base alos grupos de la regex

Me encanto la explicaci贸n en el primer minuto sobre las expresiones regulares como herramienta, ya que eso son, una herramienta.

Que bueno que es este curso, ojala quede aqui para seguilo consultando en el futuro.

Wow, esto es poderosisimo

No es lo 煤nico, pero solo esto ya vale el curso, mucho trabajo hecho eficientemente. El curso es genial.

Esta clase esta brutal! toda mi vida programando y en cada lugar donde lo he hecho he tenido que hacer este tipo de tareas que siempre hice usando excel鈥 pero esto no lo sabia y es demasiado util, al menos para los backend

A mi me sali贸 esta RegEx:

^\d+::(.+)\((\d{4})\)::.+$

Mis notas (Click aqu铆):

Lit me exploto la cabeza con JSON.

Ta potente

  • Adelante en el curso encotraras un csv de otro proyecto con infomacion de resultados de partidos entre naciones, aplico regex replace y Genero script SQL a partir de extarer la informacion de cada agrupamiento de la expresion.

REGEX

^(\d{4}\-\d{2}\-\d{2})\,([^\,]+)\,([^\,]+)\,(\d+)\,(\d+)\,([^\,]+)\,([^\,]+)\,([^\,]+)\,([A-Z]+)$

SQL

INSERT INTO match(date,home_team,away_team,score_home,score_away, tournament,city,country,neutral) VALUES($1,'$2','$3',$4,$5,'$6','$7','$8','$9'

Esto me dej贸 boquiabierto! El buscar patrones ya era algo muy genial pero el remplazar me ha dado muchas ideas para simplificar clases que uso para leer csv.

Las expresiones regulares son la navaja suiza que siempre debemos llevar

La RegEx que selecciona todas las l铆neas:

^\d+::([\w :,\(\)'\.\-&驴?隆!\/谩茅铆贸煤芒盲枚眉酶脿猫矛貌霉氓芒锚卯么没莽脕脡脥脫脷脌脠脤脪脵陆+鲁忙*$]+)\s\((\d\d\d\d)\)::.*$

Cada vez que hablan as铆 de PHP me recuerdo de este c贸mic.
.

Este curso no deja de sorprenderme, pero definitivamente esta clase ha sido la m谩s incre铆ble de todas las que he visto en Platzi hasta el momento (luego de 30+ cursos que he hecho). Me acaba de dar muchas ideas para implementar JSONs muy f谩cilmente en mis proyectos.

jajajajaja fino el chiste de PHP

Es increible lo que aprend铆 usando las expresiones regulares, jamas me habia sentido tan iluminado. Ahora si estoy listo para el verdadero reto.

Nunca sepas lo que no sabes - El Profe.

jajaja grande I love You.

Sheesh, est谩n muy guapas las regex

Me detengo para decir que fue una se帽ora clase!

import re

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

fh

for line in re.findall(r'\d+::.+\s\(\d{4}\)::.+', fh):
    print(line)

Definitivamente una vez comprendemos bien las expresiones regulares, la potencia es impresionante.

Me encanto!

La hice as铆

^\d+::(.*)(\(\d{4}\))::.*

Yo viendo todas las CSV p煤blicas y otras bases de datos luego de esta clase, ahora que convert铆 una CSV a un JSON
.

^\d{1,4}::([\w\s,.\(\):'\?\-&!\/#\*\$;]{1,})(\(\d{4,4}\))::(.*)$

Mi aporte!

La regex que hace match con todas las lineas del archivo movies.dat

^\d+::([\d\w\s,\.\-:'&\/@#路"帽驴么枚锚毛盲脿卯脕脺没莽猫矛貌霉忙酶茫芒氓谩脿茅铆贸煤媒掳鲁脕脡脥脫脷茂陆脽隆!\(\)\*\?\$\[\]\+]+)\((\d{4,4})\)::.*$

Esta clase est谩 genial

Excelente, cuanto sufri en el pasado con cosas asi
jajajajaja

Comparto mi funci贸n 馃槂 Con ella logr贸 extraer el nombre de la pel铆cula, el a帽o y el primer g茅nero de la pel铆cula.

^\d+::([\w\s,\(\)\.'\-&!\/茅]+:?[\w\s,\(\)\.'\-&!\/茅]*:?[\w\s,\(\)\.'\-&!\/茅]*)\s\((\d{4})\)::([\w]+).*$

隆Extraordinario! Generar sql y json de manera autom谩tica. 隆Qu茅 pasada!

creaci贸n de un archivo sql

^\d+::([\s\S]+)\s\((\d{4,4})\)::(.*)$

Se trata de agrupar los datos de inter茅s como en este caso son el titulo, el a帽o y las categorias y llevar un archivo de texto con un la informaci贸n en un formato poco convencional a algo de utilidad como es el caso del formato JSON para la web 馃槂

{title: "$1", year: $2, categories: "$3"}

https://regexr.com/6ahn1

Expression

^\d+::(.*)\((\d{4})\)::(([^\|\s]*)\|?([^\|\s]*)\|?([^\|\s]*)\|?([^\|\s]*)\|?([^\|\s]*)\|?([^\|\s]*)\|?([^\|\s]*)\|?([^\|\s]*)\|?)$

Texto (extracto)

1::Toy Story (1995)::Adventure|Animation|Children|Comedy|Fantasy
2::Jumanji (1995)::Adventure|Children|Fantasy
3::Grumpier Old Men (1995)::Comedy|Romance
4::Waiting to Exhale (1995)::Comedy|Drama|Romance
5::Father of the Bride Part II (1995)::Comedy
6::Heat (1995)::Action|Crime|Thriller
7::Sabrina (1995)::Comedy|Romance
8::Tom and Huck (1995)::Adventure|Children
9::Sudden Death (1995)::Action
10::GoldenEye (1995)::Action|Adventure|Thriller
11::American President, The (1995)::Comedy|Drama|Romance
12::Dracula: Dead and Loving It (1995)::Comedy|Horror
13::Balto (1995)::Animation|Children
14::Nixon (1995)::Drama
15::Cutthroat Island (1995)::Action|Adventure|Romance
16::Casino (1995)::Crime|Drama
17::Sense and Sensibility (1995)::Comedy|Drama|Romance
18::Four Rooms (1995)::Comedy|Drama|Thriller
19::Ace Ventura: When Nature Calls (1995)::Comedy
20::Money Train (1995)::Action|Comedy|Crime|Drama|Thriller
21::Get Shorty (1995)::Action|Comedy|Drama
22::Copycat (1995)::Crime|Drama|Horror|Mystery|Thriller
23::Assassins (1995)::Action|Crime|Thriller
24::Powder (1995)::Drama|Sci-Fi
25::Leaving Las Vegas (1995)::Drama|Romance
26::Othello (1995)::Drama
27::Now and Then (1995)::Drama
28::Persuasion (1995)::Drama|Romance
29::City of Lost Children, The (Cit茅 des enfants perdus, La) (1995)::Adventure|Drama|Fantasy|Mystery|Sci-Fi
30::Shanghai Triad (Yao a yao yao dao waipo qiao) (1995)::Crime|Drama
31::Dangerous Minds (1995)::Drama
32::12 Monkeys (Twelve Monkeys) (1995)::Sci-Fi|Thriller
33::Wings of Courage (1995)::Adventure|IMAX|Romance
34::Babe (1995)::Children|Comedy|Drama|Fantasy
35::Carrington (1995)::Drama|Romance
36::Dead Man Walking (1995)::Crime|Drama
37::Across the Sea of Time (1995)::Documentary|IMAX
38::It Takes Two (1995)::Comedy
39::Clueless (1995)::Comedy|Romance
40::Cry, the Beloved Country (1995)::Drama
41::Richard III (1995)::Drama|War
42::Dead Presidents (1995)::Action|Crime|Drama
43::Restoration (1995)::Drama
44::Mortal Kombat (1995)::Action|Adventure|Fantasy
45::To Die For (1995)::Comedy|Drama|Thriller
46::How to Make an American Quilt (1995)::Drama|Romance
47::Seven (a.k.a. Se7en) (1995)::Crime|Horror|Mystery|Thriller
48::Pocahontas (1995)::Animation|Children|Musical|Romance
49::When Night Is Falling (1995)::Drama|Romance
50::Usual Suspects, The (1995)::Crime|Mystery|Thriller
51::Guardian Angel (1994)::Action|Drama|Thriller
52::Mighty Aphrodite (1995)::Comedy|Drama|Romance
53::Lamerica (1994)::Adventure|Drama
54::Big Green, The (1995)::Children|Comedy
55::Georgia (1995)::Drama
56::Kids of the Round Table (1995)::Adventure|Children|Fantasy
57::Home for the Holidays (1995)::Drama
58::Postman, The (Postino, Il) (1994)::Comedy|Drama|Romance
59::Confessional, The (Confessionnal, Le) (1995)::Drama|Mystery
60::Indian in the Cupboard, The (1995)::Adventure|Children|Fantasy
61::Eye for an Eye (1996)::Drama|Thriller
62::Mr. Holland's Opus (1995)::Drama
63::Don't Be a Menace to South Central While Drinking Your Juice in the Hood (1996)::Comedy|Crime
64::Two if by Sea (1996)::Comedy|Romance
65::Bio-Dome (1996)::Comedy
66::Lawnmower Man 2: Beyond Cyberspace (1996)::Action|Sci-Fi|Thriller
67::Two Bits (1995)::Drama
68::French Twist (Gazon maudit) (1995)::Comedy|Romance
69::Friday (1995)::Comedy
70::From Dusk Till Dawn (1996)::Action|Comedy|Horror|Thriller
71::Fair Game (1995)::Action
72::Kicking and Screaming (1995)::Comedy|Drama
73::Mis茅rables, Les (1995)::Drama|War
74::Bed of Roses (1996)::Drama|Romance
75::Big Bully (1996)::Comedy|Drama
76::Screamers (1995)::Action|Sci-Fi|Thriller
77::Nico Icon (1995)::Documentary
78::Crossing Guard, The (1995)::Drama
79::Juror, The (1996)::Drama|Thriller
80::White Balloon, The (Badkonake sefid) (1995)::Children|Drama
81::Things to Do in Denver When You're Dead (1995)::Crime|Drama|Romance
82::Antonia's Line (Antonia) (1995)::Comedy|Drama
83::Once Upon a Time... When We Were Colored (1995)::Drama
84::Last Summer in the Hamptons (1995)::Comedy|Drama
85::Angels and Insects (1995)::Drama|Romance

Detalle l铆nea 1

1::Toy Story (1995)::Adventure|Animation|Children|Comedy|Fantasy
Toy Story 
1995
Adventure|Animation|Children|Comedy|Fantasy
Adventure
Animation
Children
Comedy
Fantasy
<empty>
<empty>
<empty>

Seguro beto, si entend铆 todo el potencial de las expresiones regulares.

psdata: siempre quise hacer lo mismo del video.
psdata de la psdata: Beto es el mejor.
psdata de la psdata de la psdata: ya con esto no necesito volver a ver m谩s clases

Que gran potencial !!

Find:

^(\d+)::(.*)\s\((\d{4,4})\)::(.*)$

Replace:

{ id: $1, title: $2, year: $3, genre: $4 },

(): Agrupar las matches de alguna forma.

Al momento de usar
$1, $2, 鈥 , $9

Podemos acceder a los grupos que creamos anteriormente con ()
De esta forma, es posible manipularlo de una mejor manera.

https://media2.giphy.com/media/W8o60QrI9UKnFZsPWD/giphy.gif?cid=5e214886wjvbeqa319elnqx6wny7tekuk1p1ixggy3ihmjxh&rid=giphy.gif&ct=g

Una mejora: ^\d+:馃槮.)\s((\d{4,4}))::.$

mi solucion

^\d+::(.*)\((\d{4})\).*$

replace $1 | $2

\(.*\)

replace
y ahora me quedo solo con el nombre de la pelicula en ingles y su fecha de estreno , algo que creo es que no necesariamente tenemos que resolver el problema con una expresion regular, podemos usar una detras de otra y nos quitamos de problemas

Como que por dentro sent铆 un click鈥 Maravillosa clase, creo que en todos los cursos se deber铆an dar estas clases que explican para que sirve lo que estamos aprendiendo, m谩s con un caso de la vida real

Excelente!!! 馃弳

Esta es la expresion regular que hace match con todas las lineas del documento, es un poco obvia jajaja pero muy potente 馃槂

^\d+::(.*)\s\((\d{4,4})\)::.*

Debido a la vastedad de caracteres que hay en los titulos de peliculas, ubique un patr贸n com煤n (\d\d\d\d) y reemplace por {\d\d\d\d}. Seguido de esto apliqu茅 la siguiente expresi贸n:

\d+:馃槮[^{]*){(\d{4})}

Y con esto obtuve el 100% de reemplazos 馃槂

Por alguna raz贸n me selecciona m谩s de una linea. 驴Alquien sabe porqu茅?

Incre铆blemente potente esta vaina t铆o

^[A-Za-z谩茅铆贸煤]{3,}\s?([A-Z]?[a-z谩茅铆贸煤]{3,})?(\s?[A-Z]?[a-z谩茅铆贸煤]{3,})?(\s?[A-Z]?[a-z谩茅铆贸煤]{3,})?

Esa es mi soluci贸n para poder encontrar con dos nombres y dos apellidos; apuesto a que hay forma de optimizar, pero pues estoy aprendiendo, jeje

Esta clase si que me vol贸 la mente, mas que nada para la inserci贸n se bases de datos, excelente clase

Wow, mindblowing ese uso de RegEX

No existe como \d para digitos o \w para words, algo que refiera a caracteres especiales?