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 “malas 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,…idn) 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: “Conserva 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…se 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: {“title”: “$1”, “year”: $2, “category”: ["$3"]},
search: ["(.
)(|)(.*)?"]
replace(x5): ["$1","$3"]
solo faltaria poner
{“pelis”: [ 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?