как в Python3 разделить текст на слова, пробелы и знаки препинания в список?

Такая проблема, мне нужно подробно разделить строковое значение в списке. Например, есть такое:

text = 'Day, mice. "Year" is a mistake!'

Мне нужен такой результат:

['Day', ',', ' ', 'mice', '.', ' ', '"', 'Year', '"', ' ', 'is', ' ', 'a', ' ', 'mistake', '!']

Можно ли его добиться? Я пытался типа так:

spltext = [i for i in text.split()]

Но не то немного из того, что мне нужно. ( Как бы реализовать это?


Ответы (3 шт):

Автор решения: Вадим Королёв
output = []
string = "олололо,,,  "
test_string = ""

##  Каждый символ проверяется на то: буква или цифра ли он
for char in string:
    ##  Если символ - это не пробел и не запятая
    if char.isalnum():
        test_string += char
        ##  Если строка не оканчивается на знак препинания, без кода ниже 
        ##  текст не добавился бы
        if string.index(char) == len(string) - 1:
            output.append(test_string)
    else:
        ##  Если попался знак препинания, добавить его,
        ##  но ещё проверить можно ли добавить текст
        if test_string != "":
            output.append(test_string)
            test_string = ""
        output.append(char)

→ Ссылка
Автор решения: Daniil Loban

Я бы попробовал регулярками, буквы и цифры больше одного, остльное по одному

import re

text = 'Day, mice. "Year" is a mistake!' 
g = re.findall(r'[0-9]+|[A-z]+|,| |"|!', text)

print(g)

вывод:

['Day', ',', ' ', 'mice', ' ', '"', 'Year', '"', ' ', 'is', ' ', 'a', ' ', 'mistake', '!']
→ Ссылка
Автор решения: ilya484

Вот пример реализации поставленной задачи без использования регулярных выражений:

text = 'Day, mice. "Year" is a mistake!'
lst = []
st = ''
for sym in text:
    if sym.isalpha():
        st += sym
    else:
        if len(st):
            lst.append(st)
        lst.append(sym)
        st = ''
print(lst)

Вывод:

['Day', ',', ' ', 'mice', '.', ' ', '"', 'Year', '"', ' ', 'is', ' ', 'a', ' ', 'mistake', '!']

→ Ссылка