Regex для захвата IP-адреса (S, G) многоадресной рассылки - PullRequest
0 голосов
/ 12 апреля 2019

Это регулярное выражение работает для захвата IP-адресов.Мне нужен один, чтобы захватить этот формат:
(1.1.1.1,230.1.1.1)

Как мне найти правильный RegEx?

Я хотел бы извлечь (S, G)как:

1.1.1.1 230.1.1.1

(...)
match = re.findall(r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' , line)
(...)

1 Ответ

0 голосов
/ 15 апреля 2019

У вас уже есть шаблон для одного IP-адреса. Теперь, когда вы хотите найти пару IP-адресов в скобках, вы можете просто повторить этот шаблон, вставив между , и \( \). Если вы хотите найти несколько строк, вы можете добавить многострочный флаг (?m). Чтобы фактически захватить каждый адрес в блоке, вы должны заключить его в еще одну группу. Это сделало бы:

match = re.findall(r'(?m)^\((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))'
                         +',(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\)$' , line)
for m in match:
    S = m[0]
    G = m[4]
    print S, G

Это конечно безобразно. Мы можем улучшить его, выделив повторяющиеся части, т.е. g.:

I = '(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'  # pattern for 1 to 255
IP = '(?:' +I+ '\.){3}' +I                      # pattern for IP address
SG = '(?m)^\((' +IP+ '),(' +IP+ ')\)$'          # pattern for (S,G)
match = re.findall(SG, line);
for S, G in match:
    print S, G

Здесь я также вставил ?: в группы, которые не нужно извлекать, чтобы в match оставались только IP-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...