5.1 Разцепване на символни низове

Методът split() на RegexObject разцепва символния низ на местата, където пасва регулярният израз, и накрая връща списък с получените части. Той е подобен на string.split(), но предоставя много по-голяма универсалност на разделителите, по които можете да цепите; string.split() поддържа само разцепване по празно пространство или по определен символен низ. Както може би очаквате, съществува и функция re.split() на ниво модул.

split(string [, maxsplit = 0])
Разцепва string по попаденията на регулярния израз. Ако в РИ са използвани прихващащи скоби, тогава тяхното съдържание също ще бъде върнато като част от получения списък. Ако maxsplit е различно от нула, тогава не се извършват повече от maxsplit на брой разцепвания.

Можете да ограничите броя на извършените разцепвания като подадете стойност за maxsplit. Когато maxplit е различно от нула, тогава ще се извършат максимум maxsplit разцепвания, а остатъкът от символния низ ще бъде върнат като последен елемент от списъка. В следващия пример разделител ще бъде всяка последователност от не-буквеноцифрови символи:

>>> p = re.compile(r'\W+')
>>> p.split('This is a test, short and sweet, of split().')
['This', 'is', 'a', 'test', 'short', 'and', 'sweet', 'of', 'split', '']
>>> p.split('This is a test, short and sweet, of split().', 3)
['This', 'is', 'a', 'test, short and sweet, of split().']
Понякога може да не се интересувате само от това, което е било около разделителите, но също и от това, какъв точно е бил разделителят. Ако в РИ са използвани прихващащи скоби, тогава техните стойности също се връщат като част от списъка. Сравнете следните извиквания:

>>> p = re.compile(r'\W+')
>>> p2 = re.compile(r'(\W+)')
>>> p.split('This... is a test.')
['This', 'is', 'a', 'test', '']
>>> p2.split('This... is a test.')
['This', '... ', 'is', ' ', 'a', ' ', 'test', '.', '']
Функцията re.split() на ниво модул изисква РИ да бъде подаден като първи аргумент, но иначе всичко останало си е същото.

>>> re.split('[\W]+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('([\W]+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('[\W]+', 'Words, words, words.', 1)
['Words', 'words, words.']