• Publicidad

Expresión regular para capturar texto con saltos de línea

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Expresión regular para capturar texto con saltos de línea

Notapor jero2528 » 2021-04-22 11:36 @525

Hola, Perleros.

Estoy realizando una expresión regular para capturar el siguiente texto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
description BACKBONE #- OID:XXXX #- TO_PAPTYUFICDJUEX450X01 [xe-0/0/17] - XXXXX #- ENCAPSULATION:DOT1Q #- VID:TRUNK ## INTERFAZ SERVICIOS
 no ip address
 service instance 4 ethernet
  description PRUEBAS
  encapsulation dot1q 4
  rewrite ingress tag pop 1 symmetric
  service-policy output PRUEBA
  bridge-domain 4
 !
 service instance 104 ethernet
  description XXXXX #- PREMIUM_IP #- 200MB_VID:104 #- XXXX_A&D EQUIPMENT #- XXXXXXX #- XONNECT-DC VICTORIA PLAZA ## UTP
  encapsulation dot1q 104
  rewrite ingress tag pop 1 symmetric
  bridge-domain 104
 !
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


La expresión regular que me funciona es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. /^(description.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n).+\!/mi
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Lo que quiero capturar es esta parte del texto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
description BACKBONE #- OID:XXXX #- TO_PAPTYUFICDJUEX450X01 [xe-0/0/17] - XXXXX #- ENCAPSULATION:DOT1Q #- VID:TRUNK ## INTERFAZ SERVICIOS
 no ip address
 service instance 4 ethernet
  description PRUEBAS
  encapsulation dot1q 4
  rewrite ingress tag pop 1 symmetric
  service-policy output PRUEBA
  bridge-domain 4
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


El problema es que si por alguna razón la cantidad de líneas varía no funcionará. ¿Alguna idea?

*Restricción: Podría pensar en volver el texto en una sola linea y funcionaría, lo que sucede es que requeriría retornar el texto tal como estaba con los saltos de linea.

Muchas gracias y saludos.
Saludos,

Jero2528
Avatar de Usuario
jero2528
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2014-05-14 15:43 @697
Ubicación: Bogota, Colombia

Publicidad

Re: Expresión regular para capturar texto con saltos de líne

Notapor explorer » 2021-04-22 11:52 @536

Si estamos completamente seguros de que es " !" la que marca el párrafo que nos interesa, entonces podemos usar esta expresión:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use File::Slurp;
  4.  
  5. $file = read_file("code_41437.txt");
  6.  
  7. ($captura) = $file =~ /^(description.+?)\s+[!]/s;
  8.  
  9. say "[$captura]";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

También funciona con /^(description.+?)\s+[!]$/ms Creo que es incluso mejor, pero depende de cómo cambie el formato en el futuro.

En perldoc perlre tienes al principio explicado la diferencia de usar /s o /m.
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: Expresión regular para capturar texto con saltos de líne

Notapor jero2528 » 2021-04-22 11:56 @538

¡Mola! Gracias, explorer. :D
Saludos,

Jero2528
Avatar de Usuario
jero2528
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2014-05-14 15:43 @697
Ubicación: Bogota, Colombia


Volver a Intermedio

¿Quién está conectado?

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