Дополнительно
Как написать первую букву каждого слова в строке заглавными буквами?
s = 'the brown fox'
...сделайте что-нибудь здесь...
s
должно быть:
'The Brown Fox'
Какой самый простой способ сделать это?
526
16
Метод
.title()
строки (ASCII или Unicode) делает это:Однако, как отмечается в документации, обратите внимание на строки со встроенными апострофами.
В
.название()
метод может'т работы хорошо,Попробуйте
строки.capwords()
Метод,От в Python Docs на capwords:
Просто потому, что подобные вещи меня забавляют, вот еще два решения.
Разделите на слова, выделите инициалами каждое слово из разделенных групп и снова соедините. Это изменит белое пространство, разделяющее слова, на одно белое пространство, независимо от того, каким оно было.
EDIT: Я не помню, о чем я думал, когда писал вышеприведенный код, но нет необходимости строить явный список; мы можем использовать выражение генератора, чтобы сделать это ленивым способом. Так что вот лучшее решение:
Используйте регулярное выражение для поиска начала строки или пробела, разделяющего слова, плюс одного символа, не являющегося пробелом; используйте круглые скобки для обозначения "группы совпадений". Напишите функцию, которая принимает объект match и возвращает группу соответствия пробелов без изменений и группу соответствия не пробельных символов в верхнем регистре. Затем используйте
re.sub()
для замены шаблонов. Это решение не имеет проблем с пунктуацией, как первое решение, и не переделывает пробелы, как мое первое решение. Это решение дает наилучший результат.Я рад, что изучил этот ответ. Я понятия не имел, что
re.sub()
может принимать функцию! Вы можете выполнять нетривиальную обработку внутриre.sub()
для получения конечного результата!Здесь's в резюме разных способов сделать это, они будут работать для всех этих входов:
- Самое простое решение-разделить предложение на слова и выделить первую букву затем соединить их вместе:
- Если вы Don'т хотим, чтобы разбить входную строку на слова, и через фантазии генераторы:
- Или без импорта модуле itertools:
- Или вы можете использовать регулярные выражения, от steveha'ы ответ:
Вот некоторые другие ответы, которые были учтены, и материалов, для которых они не'т работать должным образом, если мы используем определение слова в начале предложения, или что-нибудь через пробел:
используя ' ' для раскола будет исправить второй выход, но capwords() по-прежнему выиграла't работа для первого
Будьте осторожны с несколькими пробелами
Копипаст-готовая версия @ответить jibberia:
Зачем вы усложняете свою жизнь с соединениями и для петли, когда решение простое и безопасное??
Просто сделать это:
Если str.title() не работает, сделайте капитализацию самостоятельно.
Односложные слова:
Наглядный пример:
Если только вы хотите первое письмо: ``питон
Пустая строка вызовет ошибку, если вы Доступ [1:], поэтому я хотел бы использовать:
прописной только первую букву.
Как Марк указал, вы должны использовать
.название()
:Однако, если хотите сделать первую букву заглавной в шаблоне Джанго, вы могли бы использовать это:
или используя переменную:
Чтобы использовать слова...
@Комментарий Gary02127, ниже Решение название работы с апострофом
Предложенный метод STR.название() не работает во всех случаях. Например:
вместо"А Б 3С"` в.
Я думаю, лучше сделать что-то вроде этого:
Дон'т игнорировать сохранение белого пространства. Если вы хотите, чтобы процесс
'Фред Флинстоун' и вы'Фред Флинстоун'
вместо `'Фред Флинстоун' вы'вэ поврежден ваш пробел. Некоторые из вышеуказанных решений потеряете белое пространство. Здесь'ы решение, что's хорошо для Python 2 и 3 и сохраняет пустое пространство.В случае, если вы хотите сократить
Хотя все ответы уже удовлетворительное, но я'будете стараемся охватить 2 дополнительных случаях наряду со всем предыдущем случае.
Здесь вы можете использовать это
это даст вам
Я надеюсь, что это будет далеко не лишним.
Мне очень нравится этот ответ:
Копипаст-готовая версия @ответить jibberia:
Но некоторые строки, которые я посылал отколоть какие-то пустые '' символы, которые вызваны ошибками при попытке сделать с[1:]. Нет, наверное, лучшего способа сделать это, но мне пришлось добавить в если LEN(Ы) и gt;0, так как в