Книга: PyNEng
Назад: re.split
Дальше: Дополнительные материалы

re.sub

re.sub

Функция 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-адреса.

Назад: re.split
Дальше: Дополнительные материалы