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 152

Preguntas 11

Ordenar por:

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

¿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

Cuando por fin dominas las expresiones regulares

Expresión sencilla

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

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.

¡Que potencia señores! ¡pero que potencia! me eeeencanta

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…

La magia existe…se llama expresiones regulares

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,:'\.&\!\-\(\)\/\?\*\$\;\#]+?)>

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?

Wooooooooooooowwwwwwwwwww!!! 🤯🤯🤯

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”

Mi aporte hecho por mi cuenta:

Code:

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

Tremenda clase, cuanto poder en las expresiones regulares… y yo que las odiaba 😛

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)\)::.*$

Archivo no apto para procesadores core i3 😦

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

Flipando estoy!!!

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

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

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

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

Para el de 10,000 lineas!

^\d+::([\w :,\(\)\.'á-ý\-&\/ä-ÿÄ-ŸçÇà-ù!\?\*À-Ù\[\][³²¡\[email protected]"½\$¿°]+) (\(\d{4,4}\))::.*$

Demasiado brutal!! 😮

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}\))::.*

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]}

^\d+::([\w\s:,\(\)\.'éè\-Àûîêôóí&!ã\*\?]+)\s\((\d{4})\)::(([\w\-']+[\|]?)+)$ - Permitiendo con $3 obtener las categorías

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

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!

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

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})\)::.*

Increíble la clase

QUEDÉ

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 😃

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.

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?

Regex de la clase:

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

Definitivamente esto me explotó la cabeza, ¡Que potencial tan grande!

Increible, simplemente increible.

increlibleeeeee!!!

Manejar strings es igual a manejar expresiones regulares.

Esto es magia pura!

Wao! genial

estaba aburrido y esta es la expresión que busca todas jajajaja:

^\d+::([½³ýæñø\/Ç\w\s:,\(\)\?\¿"#°\+ß*'\.\-&$¡!ãäåáâàëèéêíïîìóöôòüúûù]+)\s\((\d\d\d\d)\)::.*```

probando con la expresion regular llegue a esta para parsear los titulos, año y genero:

^\d+:😦.)\s(([\d]+)):😦.)$

y al hacer el remplazo en formato json ocupe:

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

intente hacerlo con una clase especial tuve problemas con los titulos con el caracter “:” dentro del titulo, intente con esta:
^\d+:😦[\w\s():,.’,-&!/?$*#;áéíóúì]+)(([\d]+)):😦.*)$

pero no encontre como forzar que el : fuera solo uno dentro del primer “grupo”

increíble potencial 😱

Genial, esta clase me quede impresionado

Yo utilice SublimeText 3, y esta fue la expresión que utilice para reconocer todas las lineas:

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

Para todas las 10681 líneas:

^\d+::([\w\s\.\[\]\+'"\*\-:æáéíóúàèìòùäëïöüâêîôûåãñýç¿?¡!\$\#½ß@ø³°/\(\)&]+\s)(\(\d{4}\))::.*$

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

Alucinante! Esto esta genial!! Gracias profe!

Sorprendente todo el potencial que tienen las expresiones regulares

En mis tiempos de gestor de bases de datos me hubiera servido bastante estos comando. Para otra oportunidad será -.-

SI les da problea esta expresion regular es por el espacio entre los grupo 1 y 2

Solución:

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

probando con la expresion regular llegue a esta para parsear los titulos, año y genero:

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

y al hacer el remplazo en formato json ocupe:

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

intente hacerlo con una clase especial tuve problemas con los titulos con el caracter “:” dentro del titulo, intente con esta:

^\d+::([\w\s\(\),\.',\-&!\/\?\$\*#;áéíóúì]+)\(([\d]+)\)::(.*)$

pero no encontre como forzar que el : fuera solo uno dentro del primer “grupo”

😮

Cuando hiciste lo de insert en sql me exploto la cabeza es absolutamente genial.

wow

puede agregar para que me saque el genero de la pelicula

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

() -> agrupar
Expresión para buscar películas

^\d+::([\w\s:,\(\)\.\'\-&!\/\?]+)\((\d\d\d\d)\)::.*$
$1, $2 separa por grupos

de aquí pasar a otros formatos ya es muy rápido

Cuando hiciste reemplazo fue genial

🤯🤯 Excelente ejemplo de cómo podemos usar las expresiones regulares.

Herramienta sensacional!

Estuvo genial esta caso de uso para las expresiones regulares. Anteriormente me había conseguido con problemas de este tipo, y los solucionaba de una forma muy complicada. Muchísimas gracias.

Uff esta clase estuvo muy buena aprendí a ver las cosas desde otra perspectiva

Con esta expresión se consiguen todos los resultados

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