как в 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', '!']