.capitalize()が文字列の最初の文字を大文字にすることは知っていますが、最初の文字が整数の場合はどうなりますか?
この
1bob
5sandy
これに
1Bob
5Sandy
.capitalize()が文字列の最初の文字を大文字にすることは知っていますが、最初の文字が整数の場合はどうなりますか?
この
1bob
5sandy
これに
1Bob
5Sandy
回答:
最初の文字が整数の場合、最初の文字は大文字になりません。
>>> '2s'.capitalize()
'2s'
機能が必要な場合は、数字を削除して、'2'.isdigit()
各文字をチェックするために使用できます。
>>> 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')
空の文字列の場合にそれを解決します
. capitalize
他の文字も小文字に変換します。公式ドキュメントから:「タイトルケースバージョンのSを返します。つまり、単語はタイトルケース文字で始まり、残りのすべてのケース文字は小文字になります。」
他の誰もそれを言及していないという理由だけで:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
ただし、これにより
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
つまり、最初のアルファベット文字を大文字にするだけではありません。しかし、.capitalize()
少なくとも同じ点で同じ問題があり'joe Bob'.capitalize() == 'Joe bob'
ます。
これは、reモジュールを必要とせずに、文字列の残りのケースをそのまま保持するという点で@Anonの回答に似ています。
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
@Xanが指摘したように、関数はより多くのエラーチェック(xがシーケンスであることのチェックなど)を使用できますが、この手法を説明するためにエッジケースを省略しています)
@normaniusコメントごとに更新(ありがとう!)
@GeoStoneMartenが質問に答えなかったことを指摘してくれてありがとう!-それを修正
len(x) == 0
ブランチが必要です。
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
&はtitle
最初に文字列全体を小文字にしてから、最初の文字だけを大文字にするため、非常に便利な回答です。
a[:1].upper() + a[1:]
、これはlen(X)==0
コーナーケースを処理します。
ワンライナー: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))