2017-03-06 5 views
1

Probleme bei der Zuordnung einer Regex für mehrere Zeilen. Ich habe ein paar versucht, aber ohne Glück.REGEX für mehrere Zeilen

erster Versuch: ((?: \ B # show) (?.? * \ N) {6})

Ergebnis: fehlgeschlagen. Herausgefunden, dass die Linien zwischen 5-8 manchmal weniger oder mehr sein können. Also passt 6 mal nicht.

zweiter Versuch: (? < = # \ n) (.? Anzeigen * Version)

Ergebnis: Failed: Ist auf irgendetwas nicht überein, obwohl ich auf ähnlichen regex mit Erfolg verwendet habe andere Spiele

String Ich versuche zu entsprechen.

wgb-car1# show startup-config 
Using 6149 out of 32768 bytes 
! 
! NVRAM config last updated at 15:50:05 UTC Wed Oct 1 2014 by user 
! 
version 12.4 
no service pad 
service timestamps debug datetime msec 
service timestamps log datetime msec 
service password-encryption 
! 

Ich versuche, auf die Versionsnummer alles von Show zu passen.

Diese Regex funktioniert (? S) # show (. *) Version aber ich weiß nicht, wie die Zahlen zu erhalten, wie sie eine beliebige Kombination von Dezimalzahlen sein können, aber immer Zahlen.

Antwort

1

Sie konnten die folgenden regex verwenden:

(?s)#\sshow\s*(.*?)version\s*([\d.]+) 

DEMO

Python (demo)

import re 

s = """wgb-car1# show startup-config 
Using 6149 out of 32768 bytes 
! 
! NVRAM config last updated at 15:50:05 UTC Wed Oct 1 2014 by user 
! 
version 12.4 
no service pad 
service timestamps debug datetime msec 
service timestamps log datetime msec 
service password-encryption 
!""" 
r = r"(?s)#\sshow\s*(.*?)version\s*([\d.]+)" 
o = [m.group() for m in re.finditer(r, s)] 
print o 
+0

genau das, was ich suchte, danke. – NineTail

+0

Gern geschehen :-) – m87

0

Versuchen newlines bis auf die Versionsnummer übereinstimmt, und dann nicht m danach Zeilenumbrüche hinzuziehen. Sie können (?sm:show.*\nversion) verwenden, um das mehrzeilige Verhalten zu erhalten (mit den Einstellungen (?sm:...)) und dann einfach etwas wie .*$ danach, nicht mehrzeilig.

0

Eine Antwort (unter anderem) verwendet eine pos. Look-Ahead:

\#\ show 
([\s\S]+?) 
(?=version) 

Siehe a demo on regex101.com.


Als Full Python Beispiel:

import re 

string = """ 
wgb-car1# show startup-config 
Using 6149 out of 32768 bytes 
! 
! NVRAM config last updated at 15:50:05 UTC Wed Oct 1 2014 by user 
! 
version 12.4 
no service pad 
service timestamps debug datetime msec 
service timestamps log datetime msec 
service password-encryption 
!""" 

rx = re.compile(r''' 
    \#\ show 
    ([\s\S]+?) 
    (?=version) 
    ''', re.VERBOSE) 

matches = [match.group(0) for match in rx.finditer(string)] 
print(matches) 
# ['# show startup-config\nUsing 6149 out of 32768 bytes\n!\n! NVRAM config last updated at 15:50:05 UTC Wed Oct 1 2014 by user\n!\n'] 
Verwandte Themen