У меня есть следующее регулярное выражение, которое, кажется, работает нормально на regex101. Как вы можете видеть, мои четыре возможные комбинации совпадают.Действительное регулярное выражение, не работающее в python
Теперь, если я хочу реализовать это в python, я не получаю никакого совпадения, когда пытаюсь сопоставить строку, похожую на первую строку в строковом поле regex101 (строка с ничем после сетевого адреса). Вот код
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'))
Здесь ошибка я получаю
Traceback (most recent call last):
File "./testing.py", line 19, in <module>
print(l_match.group('prefnam'))
AttributeError: 'NoneType' object has no attribute 'group'
если я удалю на следующие из регулярных выражений
((?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})|)
затем он работает.
Все, что я пытаюсь найти здесь, это существование gele
или le
или ge
или ничего. Я также пробовал следующее без везения.
((?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})|(.?))
Любая идея о том, что происходит здесь
EDIT1:
После Сэмюэл ответ я испытал, но это, кажется, что все дело не соответствуют
- IP-префикс-лист PL_FROM_7600 seq 10 разрешение 192.168.1.80/28
- ip префикс-лист PL_FROM_7600 seq 20 разрешение 192.168.1.80/28 ge 23 le 25
- IP-префикс-лист PL_FROM_7600 сл 30 Разрешение 192.168.1.80/28 GE 23
- IP-префикс-лист PL_FROM_7600 40 сл разрешения 192.168.1.80/28 ле 23
1 и 2 совпадают, но не 3 и 4
Я поправки Сэмюэл регулярное выражение для:
(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})))?
Это, кажется, соответствуют все дело в настоящее время. Спасибо Сэму.
Я уже проголосовал, интересно, что случилось с моим сообщением? – Fabou78