• Publicidad

Cómo extraer cierta información de unas líneas

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

Cómo extraer cierta información de unas líneas

Notapor coltx » 2012-10-03 13:48 @616

Hola estimados, ¿es posible que me echen una mano con Perl? Necesito extraer cierto dato dentro de una línea, por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
<dato1>2732</dato1>
<dato2>10440</dato2>
<dato3>10441</dato3>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y solo debo rescatar lo que está entre '>' y '<', o sea
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
2732
10440
10441
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Cómo puedo hacer esto? Gracias.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Publicidad

Re: Cómo extraer cierta información de unas líneas

Notapor explorer » 2012-10-03 14:00 @625

No probado.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $texto = '<dato1>2732</dato1>
  2. <dato2>10440</dato2>
  3. <dato3>10441</dato3>';
  4.  
  5. while ($texto =~ />(.+?)</g) {
  6.     print "$1\n";
  7. }
Coloreado en 0.003 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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo extraer cierta información de unas líneas

Notapor coltx » 2012-10-03 14:06 @629

Funciona perfecto. Gracias, explorer.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Re: Cómo extraer cierta información de unas líneas

Notapor MARKO » 2012-10-03 16:07 @713

Apreciaría mucho una explicación de la sintaxis de la expresión regular.

Gracias por adelantado.
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Re: Cómo extraer cierta información de unas líneas

Notapor explorer » 2012-10-03 16:30 @729

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($texto =~ />(.+?)</g) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El bucle while() se repite mientras la expresión regular se cumpla.

La opción /g permite realizar búsquedas secuenciales del patrón dentro de la variable escalar $texto.

El patrón es />(.+?)</, que quiere decir:
  • busca por el carácter '>'
  • seguido por uno o más caracteres (.+), pero en una cantidad mínima (?) hasta antes del siguiente carácter en el patrón (<), y quedan capturados (()) en $1
  • seguidos por el carácter '<'
Hoy en día se usa

.+?

para representar la búsqueda de todos los caracteres posibles, pero parando primero en aquél que cumple la condición siguiente del patrón. Hace unos años se escribiría así:

[^<]+

que quiere decir que nos quedamos con uno o más caracteres que no son '<'.

Es más claro usar '.+?', desde luego.

En el patrón usamos los caracteres '>' y '<' porque nos marcan (anclan) perfectamente el lugar donde se encuentra la información que queremos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
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 0 invitados

cron