Участник форума Вова очень любит писать сообщения, опуская пробелы после знаков препинания и забывая ставить заглавные буквы в начале предложения (ему почему-то кажется, что это придает его сообщениям особый шарм). Модераторы уже устали делать замечания Вове и решили попросить программистов форума написать простейший корректор, который будет расставлять пробелы и делать буквы заглавными за Вову. Правила исправлений таковы: Предложения состоят из слов, пробелов, кавычек, знаков препинания, переводов строк. Слова состоят из букв русского и латинского алфавита. Предложения заканчиваются точкой, восклицательными или вопросительным знаком. Первое слово в предложении должно начинаться с заглавной буквы, все остальные буквы в предложении должны быть строчными. Перед каждым знаком препинания (запятая, точка, восклицательный и вопросительный знак, двоеточие, многоточие) не должно быть пробела, после каждого знака препинания должен быть пробел. Предложите свой вариант корректора. На вход подается текст, на выходе получается текст.
Ответ
import re
def correction(text):
def callback(m):
punct, word = m.groups()
word = word.capitalize() if punct in ('.', '!', '?', '') else word.lower()
return '%s %s' % (punct if punct else '', word)
return re.sub(u'\s*(^|[.!?,:\s]|\.\.\.)?\s*([a-zA-Zа-яА-Я]+|$)', callback, text, re.U)
Проверяем как работает:
>>> print(correction(u'раз ,два, три , четыре, ПЯТЬ - вышел ZaIcHiK погулять.ТУТ охотник выбегает ...прямо в зайчика СТРЕЛЯЕТ ! КОНЕЦ .'))
Раз, два, три, четыре, пять - вышел zaichik погулять. Тут охотник выбегает... прямо в зайчика стреляет! Конец.
Комментариев нет:
Отправить комментарий