← Все вопросы
title() ломает слова с апострофом — как сделать капитализацию правильно?
13
Хочу каждое слово с большой буквы. 'don't stop'.title() даёт "Don'T Stop" — буква после апострофа становится заглавной. Как этого избежать?
3 ответа
22
✓ Принятый ответ — помог автору
Это известная беда str.title(): он считает любой нелитерал границей слова, поэтому 'don't' → "Don'T", а "l'oreal" → "L'Oreal".
Надёжнее самому капитализировать по словам:
s = "don't stop"
print(' '.join(w.capitalize() for w in s.split())) # "Don't Stop"
capitalize() делает заглавной только первую букву слова и не трогает остальные.
Диана Герасимова capitalize ещё и остаток в нижний регистр приводит, имей в виду · 9 месяцев назад
9
Если важно не ломать регистр внутри слов (аббревиатуры), используй w[:1].upper() + w[1:] вместо capitalize().
4
Можно через string.capwords: import string; string.capwords(s) — но он тоже не идеален с апострофами.
Данил Карпачёв capwords хотя бы апостроф не ломает, в отличие от title · 9 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.