• Publicidad

Extraer fecha y resaltarla

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Extraer fecha y resaltarla

Notapor etsiano » 2012-09-04 10:20 @472

Buenas, amigos.

Necesito ayuda. Tengo un texto en txt. que lo abro y lo proceso. Y necesito extraer:

* cualquier fecha que exista en el artículo ( ejemplo: 4 SEP 2012 ) y resaltarla con asteriscos, o sea: **** 4 SEP 2012*****

* extraer cada frase del texto por separado

En resumen, ¿alguien sabe qué dos expresiones regulares puedo usar para:
1) extraer la fecha
2) extraer cada frase separada por un punto

¡Gracias!
Última edición por explorer el 2012-09-04 10:31 @480, editado 1 vez en total
Razón: Cambiar título, osea => o sea, formateo
etsiano
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-09-04 10:12 @467

Publicidad

Re: Extraer fecha y resaltarla

Notapor explorer » 2012-09-04 10:59 @499

Bienvenido a los foros de Perl en Español, etsiano.

Para el primer caso te vale con s/(\d{1,2} \w{3} \d{4})/**** $1 ****/g, siempre y cuando los nombres de los meses siempre tengan 3 letras.

Para el segundo caso, es más complicado, ya que en español las frases pueden acabar no solo en punto.

Suponiendo que estamos en el caso sencillo (todas las frases acaban en punto, seguido por uno o más espacios en blanco, o el final del texto), quedaría algo así (probado):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3. use File::Slurp;
  4.  
  5. my $texto = read_file('./texto');
  6.  
  7. while ($texto =~ m/(.+?[.])(?:\s+|\z)/sg) {
  8.     say "[$1]";
  9. }
  10.  
  11. __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

La expresión regular (=~) busca (m//) en el $texto, de forma repetida (/g), un patrón que consiste en uno o más caracteres cualesquiera hasta justo antes del primer '.', y que son guardados en $1 ((.+?[.])) y que a la vez estén seguidos por uno o más caracteres espacio o el final del texto ((?:\s+|\z)), sabiendo que el texto se compone de múltiples líneas pero que trataremos como si fueran una sola (/s).

Más información en tu propio ordenador en perldoc perlre, y en la Web (traducido).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Extraer fecha y resaltarla

Notapor etsiano » 2012-09-04 11:07 @505

Estoy trabajando con este artículo. ¿Podría probar que por cada punto que aparezca en el texto, se tiene una frase?

Este es mi código:


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Abro el fichero (codificación utf8) y guardo el contenido en @palabras
  2. open( F, "C:/articulo.txt" );
  3. my @articulo = <F>;
  4. close(F);
  5.  
  6. $mycount = 0;
  7. while (@articulo) {
  8.     $iterador = shift @articulo;
  9.     chomp $iterador;
  10.     if ( $iterador =~ s/(\d{1,2} \w{3} \d{4})/**** $1 ****/g ) {
  11.         $mycount = $mycount + 1;
  12.         print( $mycount. ":  $iterador \n" );
  13.     }
  14.     else {
  15.         $mycount = $mycount + 1;
  16.         print( $mycount. ":  $iterador \n" );
  17.     }
  18.  
  19. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Adjuntos
articulo.txt
(3.41 KiB) 48 veces
Última edición por explorer el 2012-09-04 17:17 @762, editado 1 vez en total
Razón: Formateado de código con Perltidy y poner marcas Perl
etsiano
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-09-04 10:12 @467

Re: Extraer fecha y resaltarla

Notapor explorer » 2012-09-04 17:21 @764

Si el texto está en utf8, ¿dónde le dices a Perl que es así?
Si no le dices nada, Perl creerá que está en iso-8859-1, un simple flujo de bytes.
Debes modificar el open(), o insertar la línea

binmode F, ':utf8';

entre la 2 y 3.

Las líneas 7 y 8 es mejor escribirlas así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for $iterador (@articulo) {
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Estoy seguro que el if() de la línea 10 en realidad debería ser un while(), y que toda la parte else{}, sobra.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 26 invitados