Функция re.sub работает аналогично методу replace в строках.
Но в функции re.sub можно использовать регулярные выражения, а значит, делать замены по более сложным условиям.
Заменим запятые, квадратные скобки и слово via на пробел в строке ospf_route:
In [7]: ospf_route = 'O 10.0.24.0/24 [110/41] via 10.0.13.3, 3d18h, FastEthernet0/0' In [8]: re.sub('(via|[,\[\]])', ' ', ospf_route) Out[8]: 'O 10.0.24.0/24 110/41 10.0.13.3 3d18h FastEthernet0/0'
С помощью re.sub можно трансформировать строку.
Например, преобразовать строку mac_table таким образом:
In [9]: mac_table = ''' ...: 100 aabb.cc10.7000 DYNAMIC Gi0/1 ...: 200 aabb.cc20.7000 DYNAMIC Gi0/2 ...: 300 aabb.cc30.7000 DYNAMIC Gi0/3 ...: 100 aabb.cc40.7000 DYNAMIC Gi0/4 ...: 500 aabb.cc50.7000 DYNAMIC Gi0/5 ...: 200 aabb.cc60.7000 DYNAMIC Gi0/6 ...: 300 aabb.cc70.7000 DYNAMIC Gi0/7 ...: ''' In [4]: print(re.sub(' *(\d+) +' ...: '([a-f0-9]+)\.' ...: '([a-f0-9]+)\.' ...: '([a-f0-9]+) +\w+ +' ...: '(\S+)', ...: r'\1 \2:\3:\4 \5', ...: mac_table)) ...: 100 aabb:cc10:7000 Gi0/1 200 aabb:cc20:7000 Gi0/2 300 aabb:cc30:7000 Gi0/3 100 aabb:cc40:7000 Gi0/4 500 aabb:cc50:7000 Gi0/5 200 aabb:cc60:7000 Gi0/6 300 aabb:cc70:7000 Gi0/7
Регулярное выражение разделено на группы:
(\d+)
- первая группа. Сюда попадет номер VLAN([a-f,0-9]+).([a-f,0-9]+).([a-f,0-9]+)
- три следующие группы (2, 3, 4) описывают MAC-адрес(\S+)
- пятая группа. Описывает интерфейс.Во втором регулярном выражении эти группы используются.
Для того, чтобы сослаться на группу, используется обратный слеш и номер группы.
Чтобы не пришлось экранировать обратный слеш, используется raw строка.
В итоге вместо номеров групп будут подставлены соответствующие подстроки.
Для примера, также изменен формат записи MAC-адреса.