Página 1 de 1

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

NotaPublicado: 2021-04-22 11:36 @525
por jero2528
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.

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

NotaPublicado: 2021-04-22 11:52 @536
por explorer
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.

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

NotaPublicado: 2021-04-22 11:56 @538
por jero2528
¡Mola! Gracias, explorer. :D