Это дизайнерское решение, которое было принято и могло пойти в любую сторону. Тим Питерс сделал этот пост , чтобы объяснить:
Например, если вы разделите «abc» по шаблону x *, что вы
ожидать? Шаблон соответствует (с длиной 0) в 4 местах,
но держу пари, что большинство людей будут удивлены, получив
['', 'a', 'b', 'c', '']
назад вместо (как они получают)
['abc']
Некоторые другие с ним не согласны. Гвидо ван Россум не хочет, чтобы оно изменилось из-за проблем с обратной совместимостью. Он сказал :
Я в порядке, добавив флаг, чтобы включить это поведение.
Редактировать
Существует обходной путь , опубликованный Яном Бурги:
>>> s = "Split along words, preserve punctuation!"
>>> re.sub(r"\s+|\b", '\f', s).split('\f')
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']
Где '\f'
можно заменить любым неиспользованным символом.