kzen.dev
  • Questions
  • Tags
  • Utilisateurs
Notifications
Récompenses
Inscription
Une fois inscrit, vous serez informé des réponses et des commentaires à vos questions.
Connectez-vous
Si vous avez déjà un compte, connectez-vous pour vérifier les nouvelles notifications.
Il y aura des récompenses pour les questions, réponses et commentaires ajoutés.
Détails
Source
Editer
 TIMEX
TIMEX
Question

Comment mettre en majuscule la première lettre de chaque mot d'une chaîne de caractères ?

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 ?

526 2009-10-11T02:03:54+00:00 3
 Georgy
Georgy
Question modifiée 5 novembre 2019 в 11:33
Programmation
python
capitalization
capitalize
Cette question a 1 réponse en anglais, pour les lire connectez-vous à votre compte.
Solution / Réponse
Mark Rushakoff
Mark Rushakoff
11 octobre 2009 в 2:04
2009-10-11T02:04:35+00:00
Détails
Source
Editer
#9566067

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&quot ;.title() "They'Re Bill'S Friends From The Uk&quot ;

[1] : http://docs.python.org/library/stdtypes.html#str.title

Mark Rushakoff
Mark Rushakoff
Réponse modifiée 11 octobre 2009 в 1:45
877
0
 steveha
steveha
11 octobre 2009 в 6:04
2009-10-11T06:04:11+00:00
Détails
Source
Editer
#9566068

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 !

 steveha
steveha
Réponse modifiée 3 décembre 2012 в 6:25
99
0
 jibberia
jibberia
11 octobre 2009 в 6:05
2009-10-11T06:05:41+00:00
Détails
Source
Editer
#9566069

Si str.title() ne fonctionne pas pour vous, faites vous-même la mise en majuscule.

  1. Divisez la chaîne de caractères en une liste de mots
  2. Mettez la première lettre de chaque mot en majuscule
  3. Assemblez les mots en une seule chaîne

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)
10
0
Communautés apparentées 2
Python en français
Python en français
1 431 utilisateurs
Ouvrir telegram
Python 🇨🇵
Python 🇨🇵
117 utilisateurs
Un groupe de Python en français. @Linux_Fr
Ouvrir telegram
Ajouter une question
Catégories
Toutes
Technologie
Culture / Loisirs
Vie / Arts
Science
Professionnel
Entreprises
Utilisateurs
Tous
Nouveau
Populaire
1
Ilya Smirnov
Enregistré il y a 1 jour
2
Денис Васьков
Enregistré il y a 2 jours
3
Dima Patrushev
Enregistré il y a 4 jours
4
sirojidddin otaboyev
Enregistré il y a 1 semaine
5
Елена Гайдамамакинат
Enregistré il y a 1 semaine
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RO
RU
SK
TR
ZH
© kzen.dev 2023
Source
stackoverflow.com
sous licence cc by-sa 3.0 avec l'attribution