Mir ist bekannt, dass .capitalize () den ersten Buchstaben einer Zeichenfolge großschreibt, aber was ist, wenn das erste Zeichen eine Ganzzahl ist?
Dies
1bob
5sandy
dazu
1Bob
5Sandy
python
capitalize
letter
user1442957
quelle
quelle
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
löst es für den leeren String-Fall. capitalize
verwandelt auch andere Zeichen in niedriger. Aus offiziellen Dokumenten: "Geben Sie eine Titelversion von S zurück, dh Wörter beginnen mit Groß- und Kleinschreibung, alle verbleibendenNur weil es sonst niemand erwähnt hat:
Dies würde jedoch auch geben
dh es wird nicht nur das erste alphabetische Zeichen großgeschrieben. Aber dann
.capitalize()
hat das gleiche Problem, zumindest darin'joe Bob'.capitalize() == 'Joe bob'
, also meh.quelle
Dies ähnelt der Antwort von @ Anon dahingehend, dass der Rest des Strings der Zeichenfolge intakt bleibt, ohne dass das Modul re erforderlich ist.
Wie @Xan hervorhob, könnte die Funktion mehr Fehlerprüfungen verwenden (z. B. die Überprüfung, ob x eine Sequenz ist - ich lasse jedoch Randfälle weg, um die Technik zu veranschaulichen).
Aktualisiert per @normanius Kommentar (danke!)
Dank @GeoStoneMarten für den Hinweis, dass ich die Frage nicht beantwortet habe! -fixed das
quelle
len(x) == 0
Zweig.return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
&title
zuerst die gesamte Zeichenfolge in Kleinbuchstaben und dann nur den ersten Buchstaben in Großbuchstaben schreibt.a[:1].upper() + a[1:]
, dies wird sich um denlen(X)==0
Eckfall kümmern .Hier ist ein Einzeiler, der den ersten Buchstaben in Großbuchstaben schreibt und den Fall aller nachfolgenden Buchstaben hinterlässt:
Dies führt zu
WordsWithOtherUppercaseLetters
quelle
Wie hier von Chen Houwu beantwortet, ist es möglich, ein String-Paket zu verwenden:
quelle
Ich habe mir das ausgedacht:
quelle
Sie können den ersten Buchstaben (
preceded by a digit
) jedes Wortes mit Regex ersetzen :quelle
ein Einzeiler:
' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))
quelle