Как сделать заглавной первую букву каждого слова в строке (Python)?

Существуют библиотеки, которые обеспечивают безопасные арифметические операции, которые проверяют переполнение / недополнение целых чисел. Например, Guava IntMath.checkedAdd (int a, int b) возвращает сумму a и b при условии, что она не переполняется, и выбрасывает ArithmeticException, если a + b переполняется подписанная int арифметика.

503
задан Brad 22 April 2015 в 00:24
поделиться

4 ответа

The .title() method of a string (either ASCII or Unicode is fine) does this:

>>> "hello world".title()
'Hello World'
>>> u"hello world".title()
u'Hello World'

However, look out for strings with embedded apostrophes, as noted in the docs.

The algorithm uses a simple language-independent definition of a word as groups of consecutive letters. The definition works in many contexts but it means that apostrophes in contractions and possessives form word boundaries, which may not be the desired result:

>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
885
ответ дан 22 November 2019 в 22:24
поделиться

Хотя весь ответ является уже удовлетворительным, но я попытаюсь покрыть 2 дополнительных случая наряду со всем предыдущим случаем.

, если пространства не равномерны и Вы хотите поддержать тот же

string = hello    world i  am    here.

, если вся строка не начинает с алфавитов

string = 1 w 2 r 3g

Здесь, можно использовать это

def solve(s):
    a = s.split(' ')
    for i in range(len(a)):
        a[i]= a[i].capitalize()
    return ' '.join(a)

, это даст Вам

output = Hello    World I  Am    Here
output = 1 W 2 R 3g

, я надеюсь, что это не избыточно.

-1
ответ дан 22 November 2019 в 22:24
поделиться

Просто потому, что такие вещи мне нравятся, вот еще два решения:

Разделить на слова, поставить инициалы на каждое слово из разделенных групп и воссоединиться. Это изменит белое пространство, разделяющее слова, на одно пустое пространство, независимо от того, что это было.

s = 'the brown fox'
lst = [word[0].upper() + word[1:] for word in s.split()]
s = " ".join(lst)

РЕДАКТИРОВАТЬ: Я не помню, о чем я думал, когда писал приведенный выше код, но нет необходимости создавать явный список; мы можем использовать выражение-генератор, чтобы делать это лениво. Итак, вот лучшее решение:

s = 'the brown fox'
s = ' '.join(word[0].upper() + word[1:] for word in s.split())

Используйте регулярное выражение для сопоставления начала строки или пробел, разделяющий слова, плюс один непробельный символ; используйте круглые скобки для обозначения «групп соответствия». Напишите функцию, которая принимает объект соответствия и возвращает группу соответствия пробелов без изменений и группу соответствия символов без пробелов в верхнем регистре. Затем используйте re.sub () для замены шаблонов. У этого нет проблем с пунктуацией, как в первом решении, и при этом он не переделывает пробелы, как мое первое решение. Этот дает лучший результат.

import re
s = 'the brown fox'

def repl_func(m):
    """process regular expression match groups for word upper-casing problem"""
    return m.group(1) + m.group(2).upper()

s = re.sub("(^|\s)(\S)", repl_func, s)


>>> re.sub("(^|\s)(\S)", repl_func, s)
"They're Bill's Friends From The UK"

Я рад, что исследовал этот ответ. Я понятия не имел, что re.sub () может принимать функцию! Вы можете выполнить нетривиальную обработку внутри re.sub () , чтобы получить окончательный результат!

100
ответ дан 22 November 2019 в 22:24
поделиться

If str.title() doesn't work for you, do the capitalization yourself.

  1. Split the string into a list of words
  2. Capitalize the first letter of each word
  3. Join the words into a single string

One-liner:

>>> ' '.join([s[0].upper() + s[1:] for s in "they're bill's friends from the UK".split(' ')])
"They're Bill's Friends From The UK"

Clear example:

input = "they're bill's friends from the UK"
words = input.split(' ')
capitalized_words = []
for word in words:
    title_case_word = word[0].upper() + word[1:]
    capitalized_words.append(title_case_word)
output = ' '.join(capitalized_words)
10
ответ дан 22 November 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: