.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(' '))