У меня есть файл, который содержит конфигурации. Мне нужно найти шаблон для соответствия нескольким строкам в файле конфигурации.Соответствие Множественные строки python regex
В принципе, я ищу для следующих типов линии:
class-map match-any virtualserver1
description virtualserver1.aaa.com
2 match virtual-address 172.16.211.153 tcp eq https
3 match virtual-address 172.16.211.153 tcp eq https
class-map match-any virtual-server2
2 match virtual-address 172.16.211.154 tcp eq http
class-map match-any vip-helloworld
description vs-yyy.com
class-map match-any vip-myvirtualServer
В файле блок как:
class-map match-any virtualserver1
description virtualserver1.aaa.com
2 match virtual-address 172.16.211.153 tcp eq https
3 match virtual-address 172.16.211.153 tcp eq https
Позже, мне нужно получить имя виртуального сервера: virtualserver1 (virtualserver1.aaa.com), если присутствует и несколько виртуальных адресов и порт (172.16.211.153 и https), если они есть.
Я пробовал различные комбинации, пытаясь сопоставить блоки, но не был успешным.
import re
fh = open('config_file.txt')
fileData = fh.read()
vipData = re.findall('^class-map match-.*\n.+', fileData,re.MULTILINE)
finalList = sorted(set(vipData))
i = 1
for data in finalList:
print str(i) +" "+ str(data)
i = i + 1
Это дает мне только первую строку и вторую строку в качестве выхода для всех присутствующих конфигураций.
Какой шаблон следует использовать для соответствия всем блокам?
Вы не можете сделать это на одном дыхании с регулярным выражением, потому что это не язык программирования, и понятия не имеет петель и поэтому нет возможности захватить ту же последовательность более чем один раз. Вместо этого вам нужно написать свой цикл в Python и захватить один блок за раз. Кроме того, поскольку вы хотите захватить неопределенное количество IP-адресов, вам понадобится второе регулярное выражение для извлечения тех, что находятся в цикле Python. – Bobulous
@Arkanon Возможность захвата всех блоков с одним проходом. –