Ich habe folgende Regex, die auf regex101 in Ordnung zu sein scheinen. Wie Sie sehen können, sind meine vier möglichen Kombinationen abgestimmt.Gültige Regex funktioniert nicht in Python
Jetzt, wenn ich dies in Python implementieren möchte, bekomme ich überhaupt keine Übereinstimmung, wenn ich versuche, eine Zeile ähnlich der ersten Zeile in Regex101 Zeichenfolge Feld (Zeile mit nichts nach der Netzwerkadresse). Hier ist der Code
import re
l_side = 'ip prefix-list PL_FROM_7600 seq 40 permit 192.168.10.0/23'
myregex = re.compile(r'''
(ip\sprefix-list)\s
(?P<prefnam>\w+)\s
(?P<prefseq>seq\s\d+)\s
(permit|deny)\s
(?P<prefnet>(?:[0-9]{1,3}\.){3}[0-9]{1,3}\/[1-3]?\d)\s
((?P<prefgele>ge\s\d{1,2}\sle\s\d{1,2})|
(?P<prefge>ge\s\d{1,2})|
(?P<prefle>le\s\d{1,2})|)
''', re.VERBOSE)
l_match = myregex.search(l_side)
print(l_match.group('prefnam'))
print(l_match.group('prefgele'))
Hier wird der Fehler ich
bekommenTraceback (most recent call last):
File "./testing.py", line 19, in <module>
print(l_match.group('prefnam'))
AttributeError: 'NoneType' object has no attribute 'group'
wenn ich die Folowing aus der regex
((?P<prefgele>ge\s\d{1,2}\sle\s\d{1,2})|
(?P<prefge>ge\s\d{1,2})|
(?P<prefle>le\s\d{1,2})|)
dann entfernen es funktioniert.
Alles, was ich hier versuche, ist die Existenz von gele
oder le
oder ge
oder nichts. Ich habe auch folgendes ohne Glück versucht.
((?P<prefgele>ge\s\d{1,2}\sle\s\d{1,2})|
(?P<prefge>ge\s\d{1,2})|
(?P<prefle>le\s\d{1,2})|(.?))
Jede Idee, was hier vor sich geht
EDIT1:
Nach Samuel Antwort, die ich getestet habe, aber es scheint, dass alle Fall nicht
- IP-Präfix-Liste abgestimmt sind PL_FROM_7600 seq 10 Genehmigung 192.168.1.80/28
- IP-Präfix-Liste PL_FROM_7600 SEQ 20 Genehmigung 192.168.1.80/28 ge 23 le 25
- IP-Präfix-Liste PL_FROM_7600 seq 30 erlaubt 192.168.1.80/28 23 ge
- IP-Präfix-Liste PL_FROM_7600 seq 40 erlaubt 192.168.1.80/28 le 23
1 und 2 angepasst sind, aber nicht mehr als 3 und 4
ich habe geändert Samuel Regex:
(ip\sprefix-list)\s
(?P<prefnam>\w+)\s
(?P<prefseq>seq\s\d+)\s
(permit|deny)\s
(?P<prefnet>(?:[0-9]{1,3}\.){3}[0-9]{1,3}(?:\/[1-3])?\d)
((\s(?P<prefgele>ge\s\d{1,2}\sle\s\d{1,2}))|
(\s(?P<prefge>ge\s\d{1,2}))|
(\s(?P<prefle>le\s\d{1,2})))?
Es scheint jetzt alle Fall übereinstimmen. Danke Sam.
Ich wurde bereits abgelehnt, ich frage mich, was ist falsch mit meiner Post? – Fabou78