← Все вопросы

title() ломает слова с апострофом — как сделать капитализацию правильно?

Задан 9 месяцев назад588 просмотров3 ответа
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 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект