예:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
이 작업을 수행하는 라이브러리 또는 표준 방법이 있습니까?
답변
title
문서에서 Right를 사용하지 않는 이유 :
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
PascalCase를 정말로 원했다면 다음을 사용할 수 있습니다.
>>> ''.join(x for x in 'make IT pascal CaSe'.title() if not x.isspace())
'MakeItPascalCase'
답변
이것은 항상 소문자로 시작하고 영숫자가 아닌 문자도 제거합니다.
def camelCase(st):
output = ''.join(x for x in st.title() if x.isalnum())
return output[0].lower() + output[1:]
답변
def capitalizeWords(s):
return re.sub(r'\w+', lambda m:m.group(0).capitalize(), s)
re.sub
(대부분의 사람들이 익숙한 용도 인 문자열이 아니라) “대체”기능을 사용할 수 있습니다. 이 repl 함수는 re.Match
패턴의 각 일치에 대한 개체 와 함께 호출되며 결과 (문자열이어야 함)가 해당 일치에 대한 대체로 사용됩니다.
같은 것의 더 긴 버전 :
WORD_RE = re.compile(r'\w+')
def capitalizeMatch(m):
return m.group(0).capitalize()
def capitalizeWords(s):
return WORD_RE.sub(capitalizeMatch, s)
이것은 패턴 (일반적으로 좋은 형식으로 간주 됨)을 미리 컴파일하고 람다 대신 명명 된 함수를 사용합니다.
답변
왜 하나 쓰지 않습니까? 다음과 같은 것이 귀하의 요구 사항을 충족시킬 수 있습니다.
def FixCase(st):
return ' '.join(''.join([w[0].upper(), w[1:].lower()]) for w in st.split())
답변
참고 : 다른 답변을 제공하는 이유는 무엇입니까? 이 답변은 질문의 제목과 camelcase가 다음과 같이 정의된다는 개념을 기반으로합니다. 각 원래 단어가 대문자로 시작되도록 (나머지는 소문자) 연결된 일련의 단어 (공백 없음!) 시리즈의 첫 번째 단어 (완전히 소문자)를 제외하고. 또한 “모든 문자열”이 ASCII 문자 집합을 참조한다고 가정합니다. 유니 코드는이 솔루션에서 작동하지 않습니다).
단순한
위의 정의가 주어지면이 함수는
import re
word_regex_pattern = re.compile("[^A-Za-z]+")
def camel(chars):
words = word_regex_pattern.split(chars)
return "".join(w.lower() if i is 0 else w.title() for i, w in enumerate(words))
, 호출되면 이러한 방식으로
camel("San Francisco") # sanFrancisco
camel("SAN-FRANCISCO") # sanFrancisco
camel("san_francisco") # sanFrancisco
덜 간단
이미 낙타 케이스로 된 문자열이 제공되면 실패합니다!
camel("sanFrancisco") # sanfrancisco <-- noted limitation
덜 간단
많은 유니 코드 문자열에서 실패합니다.
camel("México City") # mXicoCity <-- can't handle unicode
나는 이러한 경우 (또는 약간의 창의력으로 도입 될 수있는 다른 경우)에 대한 해결책이 없습니다. 따라서 문자열과 관련된 모든 일과 마찬가지로 고유 한 케이스를 커버하고 유니 코드로 행운을 빕니다!
답변
잠재적 라이브러리 : https://pypi.org/project/stringcase/
예:
import stringcase
stringcase.camelcase('foo_bar_baz') # => "fooBarBaz"
공백을 남길지 여부는 의심 스럽지만 (예에서는 공백을 제거하는 것으로 표시되지만 공백을 남긴다는 버그 추적기 문제가 있습니다.)
답변
.title ()을 사용하면 모든 단어의 첫 글자를 대문자로 변환하고 나머지는 작게 변환합니다.
>>> a='mohs shahid ss'
>>> a.title()
'Mohs Shahid Ss'
>>> a='TRUE'
>>> b=a.title()
>>> b
'True'
>>> eval(b)
True