Книга: PyNEng
Назад: Флаги
Дальше: re.sub

re.split

re.split

Функция split работает аналогично методу split в строках.
Но в функции re.split можно использовать регулярные выражения, а значит, разделять строку на части по более сложным условиям.

Например, строку ospf_route надо разбить на элементы по пробелам (как в методе str.split):

In [1]: ospf_route = 'O     10.0.24.0/24 [110/41] via 10.0.13.3, 3d18h, FastEthernet0/0'  In [2]: re.split(' +', ospf_route) Out[2]: ['O',  '10.0.24.0/24',  '[110/41]',  'via',  '10.0.13.3,',  '3d18h,',  'FastEthernet0/0'] 

Аналогичным образом можно избавиться и от запятых:

In [3]: re.split('[ ,]+', ospf_route) Out[3]: ['O',  '10.0.24.0/24',  '[110/41]',  'via',  '10.0.13.3',  '3d18h',  'FastEthernet0/0'] 

И, если нужно, от квадратных скобок:

In [4]: re.split('[ ,\[\]]+', ospf_route) Out[4]: ['O', '10.0.24.0/24', '110/41', 'via', '10.0.13.3', '3d18h', 'FastEthernet0/0'] 

У функции split есть особенность работы с группами (выражения в круглых скобках).
Если указать то же выражение с помощью круглых скобок, в итоговый список попадут и разделители.

Например, в выражении как разделитель добавлено слово via:

In [5]: re.split('(via|[ ,\[\]])+', ospf_route) Out[5]: ['O',  ' ',  '10.0.24.0/24',  '[',  '110/41',  ' ',  '10.0.13.3',  ' ',  '3d18h',  ' ',  'FastEthernet0/0'] 

Для отключения такого поведения надо сделать группу noncapture.
То есть, отключить запоминание элементов группы:

In [6]: re.split('(?:via|[ ,\[\]])+', ospf_route) Out[6]: ['O', '10.0.24.0/24', '110/41', '10.0.13.3', '3d18h', 'FastEthernet0/0'] 
Назад: Флаги
Дальше: re.sub