• Publicidad

Sacar una parte de un texto con una expresión regular

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

Sacar una parte de un texto con una expresión regular

Notapor BigBear » 2009-10-03 18:23 @807

Hola.

Tengo la siguiente cadena de texto :

:La vida es un misterio sin sentido! :Dejate de joder tio

Lo que ya tengo es /:(.*)!/, con esta expresión regular logro sacar esa parte pero lo que quiero sacar es toda la respuesta que está en el segundo ":" (Dejarte de joder tio) que vendría a ser todo lo que le sigue al segundo ':' en adelante.

¿Cómo lo haría?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Sacar una parte de un texto con una expresión regular

Notapor explorer » 2009-10-03 18:33 @814

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
':La vida es un misterio sin sentido! :Dejate de joder tio' =~ m/([^:]*)$/;
print $1;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Extraemos la parte final ($) que no contenga ningún ':'.
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: Sacar una parte de un texto con una expresión regular

Notapor erv-Z » 2009-10-04 08:40 @403

Ésta también es una opción:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $texto = ":La vida es un misterio sin sentido! :Dejate de joder tio";
  2.  
  3. if ($texto =~ m/! :(.+)/ig){ print $1; }
  4.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: Sacar una parte de un texto con una expresión regular

Notapor BigBear » 2009-10-04 09:44 @447

Gracias explorer y a erv-z. Tengo otra duda porque quiero juntar las dos expresiones regulares en una, con un while() para que busque en un texto.

while ($content =~m/:(.*)!/) {

Y que se guarden así

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$1 =   La vida es un misterio sin sentido
$2 =  Dejate de joder tio
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Para poder imprimirlas tranquilamente.

Pero cuando intento poner la tuya se me complica. Disculpa la molestia.

¿Como quedaría?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Sacar una parte de un texto con una expresión regular

Notapor explorer » 2009-10-04 09:52 @452

Debes agregar la opción /g a la expresión regular, para que se aplique a todas las apariciones dentro del texto.

Has de tener cuidado con el operador avaricioso '.*' porque se "comerá" todos los caracteres posibles, así que quizás no podrás extraer las partes por separado. Mejor usa '.*?' siempre que puedas.

¿No sería mejor usar split() en lugar de una expresión regular? Si sabes que el carácter ':' no va a aparecer dentro de las dos partes, si no que es el delimitador, es muy fácil leer las partes con split().

Si pones un ejemplo junto con el código que estás probando, será más fácil ayudarte.
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: Sacar una parte de un texto con una expresión regular

Notapor erv-Z » 2009-10-04 10:04 @461

Ok, pues te recomiendo que mires bien el código y que te vayas al tutorial de expresiones regulares y practiques.

Aquí lo que pediste

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $texto = ":La vida es un misterio sin sentido! :Dejate de joder tio";
  2.  
  3. while ($texto =~ m/:(.+)! :(.+)/ig){ print $1."\n".$2."\n"; }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¡Saludos!
Última edición por explorer el 2009-10-04 10:27 @477, editado 2 veces en total
Razón: ps => pues, code => código
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Sacar nombres de una cadena de texto

Notapor BigBear » 2009-10-04 12:35 @566

Hola.

Tengo la siguiente cadena de texto

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
:127.0.0.1 353 HUs = #locos :HUs Guas Galaxia Justin Tom
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo que ya tengo son los nombres que saqué con este código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($texto =~ m/ :(.+)/ig){
  2. my @nicks = $1;  #Guardamos todos los nicks
  3. }
  4.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Pero quiero separar los nombres sin saber cuántos son, o sea, que
separe todos los nombres guardados en @nicks que estén cada un espacio.

Para poder imprimirlos tranquilamente de la siguiente manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach $names(@nicks) {
  2. print "Nick = $names\n";
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Sacar una parte de un texto con una expresión regular

Notapor explorer » 2009-10-04 12:43 @571

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @nicks = split " ", $1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 21 invitados