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
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
Odpowiedzi:
Jeśli pierwszy znak jest liczbą całkowitą, pierwsza litera nie zostanie zamieniona na wielką.
>>> '2s'.capitalize()
'2s'
Jeśli chcesz mieć tę funkcjonalność, '2'.isdigit()
usuń cyfry, możesz użyć do sprawdzenia każdego znaku.
>>> s = '123sa'
>>> for i, c in enumerate(s):
... if not c.isdigit():
... break
...
>>> s[:i] + s[i:].capitalize()
'123Sa'
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ł:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Jednak to również dałoby
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
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.
Jest to podobne do odpowiedzi @ Anon, ponieważ zachowuje resztę wielkości liter w postaci nienaruszonej, bez potrzeby stosowania modułu re.
def sliceindex(x):
i = 0
for c in x:
if c.isalpha():
i = i + 1
return i
i = i + 1
def upperfirst(x):
i = sliceindex(x)
return x[:i].upper() + x[i:]
x = '0thisIsCamelCase'
y = upperfirst(x)
print(y)
# 0ThisIsCamelCase
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
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ą.
jednowierszowy: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))