s = 'the brown fox'
...faire quelque chose ici...
Le "s" devrait être :
'The Brown Fox'
Quel est le moyen le plus simple de faire cela ?
C'est ce que fait la méthode [.title()
][1] d'une chaîne de caractères (ASCII ou Unicode) :
>>> "hello world".title()
'Hello World'
>>> u"hello world".title()
u'Hello World'
Cependant, faites attention aux chaînes avec des apostrophes incorporées, comme indiqué dans la documentation.
L'algorithme utilise une définition simple, indépendante de la langue, selon laquelle un mot est constitué de groupes de lettres consécutives. Cette définition fonctionne dans de nombreux contextes, mais elle implique que les apostrophes dans les contractions et les possessifs forment des limites de mots, ce qui peut ne pas être le résultat souhaité :
"ils'sont les amis de Bill'au Royaume-Uni" ;.title() "They'Re Bill'S Friends From The Uk" ;
[1] : http://docs.python.org/library/stdtypes.html#str.title
Juste parce que ce genre de choses m'amuse, voici deux autres solutions.
Divisez en mots, paraphez chaque mot des groupes divisés, et rejoignez-les. Cela changera l'espace blanc séparant les mots en un seul espace blanc, peu importe ce qu'il était.
s = 'the brown fox'
lst = [word[0].upper() + word[1:] for word in s.split()]
s = " ".join(lst)
EDIT : Je ne me souviens plus à quoi je pensais lorsque j'ai écrit le code ci-dessus, mais il n'est pas nécessaire de construire une liste explicite ; nous pouvons utiliser une expression de générateur pour le faire de manière paresseuse. Voici donc une meilleure solution :
s = 'the brown fox'
s = ' '.join(word[0].upper() + word[1:] for word in s.split())
Utilisez une expression régulière pour faire correspondre le début de la chaîne, ou l'espace blanc séparant les mots, plus un seul caractère sans espace blanc ; utilisez les parenthèses pour marquer les groupes de correspondance. Écrivez une fonction qui prend un objet match, et renvoie le groupe de correspondance des espaces blancs inchangé et le groupe de correspondance des caractères autres que les espaces blancs en majuscules. Utilisez ensuite re.sub()
pour remplacer les motifs. Celle-ci n'a pas les problèmes de ponctuation de la première solution, et ne refait pas les espaces blancs comme ma première solution. Cette solution donne le meilleur résultat.
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"
Je suis content d'avoir fait des recherches sur cette réponse. Je ne savais pas que re.sub()
pouvait prendre une fonction ! Vous pouvez faire un traitement non trivial dans re.sub()
pour produire le résultat final !
Si str.title() ne fonctionne pas pour vous, faites vous-même la mise en majuscule.
Un seul mot :
>>> ' '.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"
Un exemple clair :
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)