• Publicidad

Busqueda de cadenas entre " "

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

Busqueda de cadenas entre " "

Notapor Eli Juarez » 2007-01-31 14:18 @637

Hola, tengo un problema y agradecería cualquier ayuda que me pudieran dar. Tengo un archivo de texto del cual me gustaría que se imprimieran sólo las palabras que están entre '""'. Por ejemplo:

Este es un texto de "prueba" para ver si se "imprime" entre "comillas".


Al correr el script sólo imprimiera:prueba imprime comillas

¿Que puedo hacer? Intenté esto
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@array=split(/\"*\"/,$l);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
pero al parecer hace algo diferente a lo que necesito.

Gracias
Eli Juarez
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2007-01-31 14:12 @633

Publicidad

Notapor explorer » 2007-01-31 14:50 @660

Bienvenido a los foros de Perl en Español.

El comando split divide la cadena según el separador que indiques. Tienes que refinarlo un poco más.

Si usas split(/"([^"]*)"/, $l); te sacará, separados, los trozos de texto que tienen comillas, de los que no. Luego tendrás que pintar los que tienen las comillas:
Código: Seleccionar todo
#!/usr/bin/perl

$cadena = 'Este es un texto de "prueba" para ver si se "imprime" entre "comillas"';

foreach $texto ( split(/("[^"]*")/, $cadena)) {
    if ( $texto =~ m/"/ ) {
        $texto =~ s/"(.+)"/$1/;
        print "$texto\n";
    }
}

__OUTPUT__
prueba
imprime
comillas
La expresión regular /("[^"]*")/ quiere decir: busca por '"' seguido de cero o más (*) caracteres que no (^) sean '"' y seguidos por un '"' final. Vamos, estamos buscando texto entrecomillado (sin comillas dentro).

Como estamos usando un split, necesitamos que nos devuelva además los separadores encontrados, así que por eso están los paréntesis.

Luego, en el if, usamos una expresión regular para separar los trozos de texto con comillas de los que no la tienen (no tienen caracteres '"').

Si es un texto entrecomillado, las quitamos con el operador s///. Y finalmente lo pintamos.

Claro que... estamos haciendo mucho trabajo para lo que realmente queremos.

Eli Juarez dice: "...me gustaría que se imprimieran sólo las palabras que están entre ""...".

Bueno, pues como tenemos que localizar algo, usaremos expresiones regulares.

Código: Seleccionar todo
#!/usr/bin/perl

$cadena = 'Este es un texto de "prueba" para ver si se "imprime" entre "comillas"';

while ( $cadena =~ m/"([^"]+)"/g ) {   # Mientras en la $cadena existan palabras entrecomilladas
    push @encontradas, $1;             # La guardamos
}

print join(" ", @encontradas);         # prueba imprime comillas
que, de forma abreviada también se puede escribir:
Código: Seleccionar todo
#!/usr/bin/perl
$cadena = 'Este es un texto de "prueba" para ver si se "imprime" entre "comillas"';
# Imprimir -unidas por espacios- todas las palabras entrecomilladas de la $cadena
print join(" ", $cadena =~ /"([^"]+)"/g );
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 2 invitados