@Ricustan

Как найти строки и заменить ip адрес?

команда:
txt = "CR2112-0718 192.168.1.1/24 192.168.1.2 192.168.1.3"
x = txt.split()
print("conf t")
for i in range(1,len(x)):
print("object network",x[i],"\nhost",x[i],"\ndescription",x[0])
print("object-group network BLACKIP")
for i in range(1,len(x)):
print("network-object object",x[i])
print("end")
print("wr")

Вопрос: как надо дополнить команду так что бы если в строке есть IP адрес с маской подсети например (192.168,1,1/24) то выводи как subnet 192.168.1.1 255.255.255.0, а если IP адрес без маски под сети например (192.168.1.2) то на выходе host 192.168.1.2
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 2
@borisalekseev
extra beginner junior python backend
Вам необходимо воспользоваться регулярными выражениями. В помощь модуль re.
Ответ написан
@DenisShahbazyan
Не очень понял задачу, но вот решения на то как понял я):

1. Можно по наличию слэша:
txt = "CR2112-0718 192.168.1.1/24 192.168.1.2 192.168.1.3"
arr = txt.split()

for i in range(1, len(arr)):
    if '/' in arr[i]:
        print(f'subnet {arr[i]} 255.255.255.0')
    else:
        print(f'host {arr[i]}')


2. Можно находить ip со слэшами (регулярки нужно перепроверить, а вторая не подхватывает последний ip)
import re


txt = "CR2112-0718 192.168.1.1/24 192.168.1.2 192.168.1.3"

with_a_mask = re.findall(
    r'([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}/[\d]{1,2})', txt
)
without_a_mask = re.findall(
    r'([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})[^/]', txt
)  # Не подхватывает последний ip 

print(with_a_mask)
print(without_a_mask)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы