У вас уже есть шаблон для одного 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-адреса.