Wiem, że .capitalize () zamienia pierwszą literę ciągu na wielką literę, ale co, jeśli pierwszy znak jest liczbą całkowitą?
to
1bob
5sandy
do tego
1Bob
5Sandy
python
capitalize
letter
user1442957
źródło
źródło
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
rozwiązuje problem dla przypadku pustego ciągu. capitalize
zmieni również inne znaki na niższe. Z oficjalnych dokumentów: „Zwróć wersję S w tytule, tj. Słowa zaczynają się od wielkich liter w tytule, wszystkie pozostałe znaki mają małe litery. ”Tylko dlatego, że nikt inny o tym nie wspomniał:
Jednak to również dałoby
tzn. nie tylko zamienia się na wielką literę pierwszego znaku alfabetu. Ale potem
.capitalize()
ma ten sam problem, przynajmniej w tym'joe Bob'.capitalize() == 'Joe bob'
, więc meh.źródło
Jest to podobne do odpowiedzi @ Anon, ponieważ zachowuje resztę wielkości liter w postaci nienaruszonej, bez potrzeby stosowania modułu re.
Jak zauważył @Xan, funkcja może używać więcej sprawdzania błędów (na przykład sprawdzania, czy x jest sekwencją - jednak pomijam przypadki skrajne, aby zilustrować technikę)
Zaktualizowano komentarzem @normanius (dzięki!)
Dzięki @GeoStoneMarten za wskazanie, że nie odpowiedziałem na pytanie! - naprawiłem to
źródło
len(x) == 0
gałęzi.return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
&title
najpierw małą literą cały ciąg, a potem wielką tylko pierwszą literę.a[:1].upper() + a[1:]
, to zajmie sięlen(X)==0
skrzynką narożną.Oto jedna linijka, która będzie wielką pierwszą literą i pozostawi wielkość wszystkich kolejnych liter:
Spowoduje to
WordsWithOtherUppercaseLetters
źródło
Jak widzę tutaj odpowiedź Chen Houwu, możliwe jest użycie pakietu string:
źródło
Wymyśliłem to:
źródło
Możesz zamienić pierwszą literę (
preceded by a digit
) każdego słowa za pomocą wyrażenia regularnego:źródło
jednowierszowy:
' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))
źródło