- en
- Language: ru
- Documentation version: latest
Функция 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(r'(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(r' *(\d+) +'
...: r'([a-f0-9]+)\.'
...: r'([a-f0-9]+)\.'
...: r'([a-f0-9]+) +\w+ +'
...: r'(\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-адреса.