No tienes acceso a esta clase

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

Curso de Expresiones Regulares

Curso de Expresiones Regulares

Alberto Alcocer (Beco)

Alberto Alcocer (Beco)

Perl

22/29
Recursos

Aportes 72

Preguntas 8

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

wow, nunca había visto nada de código de este lenguaje hasta esta clase, gracias beco!

Pero no hay curso de Perl en Platzi. 😥 Jaja

Si necesitan declarar la equivalencia de string en perl tenemos que usar eq

Ejemplo:

if ($local eq "Venezuela") {
#...
}

Para Perl:
Todas las expresiones regulares van entre dos diagonales /miExpresionRegular/

Ejemplos:

  • Cada partido que se hizo en febrero: ^[\d]{4,4}\-02-.*$
  • Cada vez que ganó el visitante: ^[\d]{4,4}.*?,(.*?),(.*?),(\d+),(\d+),.*$ -> lo podemos imprimir en Perl como:
if(m/^[\d]{4,4}.*?,(.*?),(.*?),(\d+),(\d+),.*$/) {
  if ($4 > $3) {
    printf("%s (%d) - (%d) %s\n", $1, $3, $4, $2);
      # $1 es el equipo local
      # $2 es el equipo visitante
      # $3 es el marcador del equipo local
      # $4 es el marcador del equipo visitante
  }
  $match++;
}
  • Lo mismo pero ahora añadimos el año del partido: ^([\d]{4,4})\-.*?,(.*?),(.*?),(\d+),(\d+),.*$ -> Lo mostramos así:
if(m/^([\d]{4,4})\-.*?,(.*?),(.*?),(\d+),(\d+),.*$/) {
    if ($5 > $4) {
      printf("%s: %s (%d) - (%d) %s\n", $1, $2, $4, $5, $3);
      # $1 es la fecha
      # $2 es el equipo local
      # $3 es el equipo visitante
      # $4 es el marcador del equipo local
      # $5 es el marcador del equipo visitante
    }
    $match++;
  }
  • Match para expresiones regulares en Perl:
m/regex/
  • Código para obtener partidos jugados en febrero:
#!/usr/bin/perl

use strict;
use warnings;

my $t = time;

open(my $f, "<../regex/results.csv") or die("no hay archivo");

my $match = 0;
my $nomatch = 0;

while(<$f>) {
	chomp; # omite saltos de linea y otros caracteres
	# 2018-06-04,Italy,Netherlands,1,1,Friendly,Turin,Italy,FALSE
    # m --> match 
    # en pearl: /regex/
    if(m/^[\d]{4,4}\-02\-.*$/){
        printf $_."\n";
        $match++;
    } else{
        $nomatch++;
    }

}

close($f);

printf("Se encontraron \n - %d matches\n - %d no matches\ntardo %d segundos\n"
	, $match, $nomatch, time() - $t);
  • Código para obtener los partidos en los que ganan los visitantes:
#!/usr/bin/perl

use strict;
use warnings;

my $t = time;

open(my $f, "<../regex/results.csv") or die("no hay archivo");

my $match = 0;
my $nomatch = 0;

while(<$f>) {
	chomp;

	if(m/^([\d]{4,4}).*?,(.*?),(.*?),(\d+),(\d+),.*$/){
		if($5 > $4) {
			printf("%s: %s (%d) - (%d) %s\n",
				$1, $2, $4, $5, $3
			);
		}
	    $match++;
	} else {
		$nomatch++;
	}
}

close($f);

printf("Se encontraron \n - %d matches\n - %d no matches\ntardo %d segundos\n"
	, $match, $nomatch, time() - $t);

Es genial esto! Aunque no utilice PERL te das cuenta de como puedes aplicarlo para otros lenguajes

Hola
Para ayudarme con los comandos y ejecuciones en Windows uso GIT bash, por si alguien ocupa.

uff… da gusto ver a @beco escribiendo código, se ve que es un experto sin duda alguna y sabe enseñar… mostro!

Me encanta de perl este tipo de cosas:

or die

Si ese lenguaje estuviese de moda actualmente, no me quiero imaginar la cantidad de memes.

otra forma de trabajar con expresiones regulares y perl:

$ cat parsea.pl
#!/usr/bin/perl


use warnings;
my $t = time;
$match = 0;
$nomatch = 0;



open (CMD,"./result.csv");


while ($line = <CMD>) {
        if ($line =~ /^(\d+\-\d+\-\d+),(.*),(.*),(\d+),(\d+),(.*),(.*),(.*),(TRUE|FALSE)/) {
                $date=$1;
                $home_team=$2;
                $away_team=$3;
                $home_score=$4;
                $away_score=$5;
                $tournament=$6;
                $city=$7;
                $country=$8;
                $neutral=$9;
                if ($home_score > $away_score) {
                        $year = $date;
                        $year =~ s/(\d+)\-\d+\-\d+/$1/;
                        print "$year - $home_team ($home_score) - $away_team ($away_score)\n";
                }
                #print "*$line";
                $match++;
        } else {
                #print $line;
                $nomatch++;
        }


}

print "se encontraron $match\n";
print "no se encontraron $nomatch\n";
print "tardo:".(time()-$t)."\n";

esta parte es muy interesante:

 $year =~ s/(\d+)\-\d+\-\d+/$1/;

uso una expresion regular para extraer el año

espero les sirva

Desde perl.org pueden buscar indicaciones para descargar Perl en tu sistema operativo. Me sorprendió que Linux y MacOS lo tuvieran instalado por defecto.
Escribiendo perl -v en la terminal de Linux se puede saber qué versión se está usando.

Primera vez que miro código de perl jaja
un gran ejemplo y medio confuso lo de las variables, aun que en los comentarios vi como se lidia con eso, la rapidez con la que se itera sobre el archivo completo es impresionante

Esto está genial!!

Lo realice sin escapar el dígito inicial como si fuera una clase y obtuve el resultado, creo que no es del todo necesario escaparlo.

<code>
if(m/^\d{4,4}\-02\-.*$/) {

No sé Perl, pero qué bonito se ve escrito xD, de igual manera se entiende bastante la sintaxis porque felizmente antes llevé la introducción a C y luego también a C++:

#!/usr/bin/perl

use strict;
use warnings;

my $t = time;

open(my $f, “<./results.csv”) or die (“no hay archivo”);

my $match = 0;
my $nomatch = 0;

while(<$f>) {
chomp;
if(m/^([\d]{4,4})-.?,(.?),(.?),(\d+),(\d+),.$/) {
if($5 > $4) {
printf("%s: %s (%d) - (%d) %s\n", $1, $2, $4, $5, $3);
}
# print $_."\n";
$match++;
} else {
$nomatch++;
}
}

close($f);

printf(“Se encontraron matches: \n - %d matches\n - %d no matches\ntardo %d segundos\n”,
$match, $nomatch, time() - $t );

Admirable el trabajo de Beco al mostrar el poder de este lenguaje con las expresiones regulares.

definitivamentes las regex son parte indispansable para nuestro crecimiento pro!!

\### Conclusión Las expresiones regulares en Perl son extremadamente poderosas para manipular y analizar texto. Su sintaxis es flexible, y ofrece herramientas avanzadas para búsquedas, reemplazos y validación de patrones. Debido a su soporte nativo, Perl es una excelente opción cuando se requiere trabajar intensivamente con texto y patrones complejos.
alguien sabe como se instala perl
There are no PERL programming courses anymore hahahahahaha or I don't know if they ever existed in Platzi.
"No es una clase de perl, no les estoy sugiriendo que usen esto, por más rápido y bueno que sea" JAJAJAJ Eso es Marketing de psicología inversa XD.
ff
perl
💻 Botón para **Curso de Perl** enfocado en ***Usos Laborales*** 🤯

Super ese lenguaje, serīa genial tener un curso de este

su consola parece matrix

Las expresiones regulares en Perl inician con una letra que indica la accion a ejecutar, por ejemplo, m para matches

Excelente clase. Muy buen lenguaje de programacion!

23 minutos 🫠

Perl me parece un lenguaje muy potente, para realizar análisis y valides de datos de manera rápida y compleja. En potencia podría compararse talvez con Python.

Estoy muy impresionado de haber aprendido el uso de perl para las expresiones regulares. No sabia nada al principio e incluso daba por perdido el uso del codigo, pero ahora que me quedo claro estoy impresionado de la enseñaza del profe ahora si me quedo clarisimo. A seguir aprendiendo.

Aqui encontraremos mas datos interesantes sobre epoch

jejejejej

Bien por los galeses

Imprimir todos los partidos de la historia del futbol que han sido jugados en febrero

primera vez que veo PERL y no me disgusta

Definitivamente me quito el sombrero ante este curso. ¡Grande!

Platzi saco un curso de COBOL, así que estaría genial uno de Perl, y puesto a pedir… Porque no uno de REXX… 😂

Perl 🐪 es un excelente lenguaje… De eso no hay duda.

Probe hacer la misma funcionalidad del código en dart.

Perl es muy parecido a C++. Nunca me habit tocado ver Código Perl hasta esta clase xp

Al principio me había parecido aburrido y no le encontraba utilidad a REGEX pero wow, es increíblemente útil

0 segundos

Increíble, pero se nota la potencia que tiene esta herramienta…

¿Alguien más notó un error de edición del video a partir del minuto 6:59?

2 Segundos 😦

mas que interesanton perl! y sobre todo lo aplicado en este curso con las expresiones regulares!

Qué genial como encuentra todo, Perl tiene un parecido cercano a C.

Es la primera vez que veo el lenguaje.

SUPERFAST

Que maravilla

Increible

No conocia este lenguaje, pero se ve bien interesante para usar

Viendo esta clase se me ocurrieron muchas aplicaciones para mi trabajo. No entendía el poder de las expresiones regulares.

Son excelentes las REGEX

genial

Busqué cursos de Perl, pero no me arrojó ninguno. ¿Algún motivo? Xb

Ahora quiero aprender Perl 😄

Excelente explicación, se pudo observar el gran potencial de las expresiones regulares sobre todo este conjunto de datos para organizarlos rápidamente.

"Atom se pone loco, me choca"
jajajaj

Cuál sería su expresión regular para tomar todos los partidos de su país?
Y luego capturar: año, país a, país b y resultados. Luego mostrarlo en algún lenguaje, cuántas variables hay? $1, $2, $3 … $10, …?
Mi primer intento:

^(\d{4,4})\-.*?,(((.*[Pp]eru.*),(.*?))|((.*?),(.*[Pp]eru.*))),(\d+),(\d+),.*$

Si Perl no se usa actualmente, el porque los otros lenguajes lo han superado en interactividad, pero si con Perl este tipo de trabajos se hacen el menos de un segundos, me imagino los lenguajes como Python haciendo lo mismo en microsegundos.

No conozco Perl, pero esta clase me despertó curiosidad por aprenderlo

Para trabajar en perl, uso una application open que se llama Cygwin;
Cygwin es un entorno de ejecución y programación para Windows.
Es Unix-Like y se puede instalar muchos paquetes del mundo linux… ahi instale perl, (a veces tambien python, gpp, g++, gcc, imagemagick, wget etc…) y funciona genial.
Pueden echarle un vistazo si gustan.

Me impresiona la potencia que tienen las expresiones regulares con archivos tan grandes.

No conocía Perl pero sin duda es bastante potente

El índice de los conjuntos es ascendente y empieza desde 1, asignados de izquierda a derecha.
Ej.:

^[\d]{4,4}\-.*?,(.*?),(\w.*?),(\d+),.*$

(.?) = $1, (\w.?) = $2, (\d+) = $3

^([\d]{4,4})\-.*?,(.*?),(\w.*?),(\d+),.*$

([\d]{4,4}) = $1, (.?) = $2, (\w.?) = $3, (\d+) = $4

En la última parte le salen 39008 matches porque al agregar la condición deseada no movió la variable que cuenta el # de matches dentro de la misma:

$match++;

Debería ir dentro del if y fuera del mismo el $nomatch:

if($4 > $3) {
	printf("%s (%d) - (%d) %s\n", $1, $3, $4, $2);
	$match++;
}
$nomatch++;

Insertar meme de: “Do I detect C in this languaje?”

Perl es un lenguaje que hasta la fecha sigue siendo utilizado para fines de scripting, hay que tenerle respeto aunque no lo lleguemos a utilizar.