- en
- Language: ru
- Documentation version: latest
Функция 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(r' +', ospf_route)
Out[2]:
['O',
'10.0.24.0/24',
'[110/41]',
'via',
'10.0.13.3,',
'3d18h,',
'FastEthernet0/0']
Аналогичным образом можно избавиться и от запятых:
In [3]: re.split(r'[ ,]+', ospf_route)
Out[3]:
['O',
'10.0.24.0/24',
'[110/41]',
'via',
'10.0.13.3',
'3d18h',
'FastEthernet0/0']
И, если нужно, от квадратных скобок:
In [4]: re.split(r'[ ,\[\]]+', 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(r'(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(r'(?:via|[ ,\[\]])+', ospf_route)
Out[6]: ['O', '10.0.24.0/24', '110/41', '10.0.13.3', '3d18h', 'FastEthernet0/0']