예:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
이 작업을 수행하는 라이브러리 또는 표준 방법이 있습니까?
예:
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'
title. "알고리즘은 단어의 단순한 언어 독립적 정의를 연속 된 문자 그룹으로 사용합니다. 정의는 많은 상황에서 작동하지만 축약 형 및 소유격의 아포스트로피가 단어 경계를 형성 함을 의미합니다. 원하는 결과가 아닐 수 있습니다. " 한 가지 가능한 해결책은 정규식과 함께 Laurence의 대답을 사용 r"['\w]+"하여 아포스트로피가 일치를 끝내지 않도록하는 것입니다 (필요에 따라 추가 구두점을 추가 할 수 있음).
'make IT camel CaSe'.title().replace(' ', '').
def toCamel(s): ret = ''.join(x for x in s.title() if not x.isspace()) return ret[0].lower() + ret[1:] 사용법 :toCamel("WRITE this in camelcase") 'writeThisInCamelcase'
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)
이것은 패턴 (일반적으로 좋은 형식으로 간주 됨)을 미리 컴파일하고 람다 대신 명명 된 함수를 사용합니다.
match전달됩니까? matches정규식에는 그룹이 있기 때문 입니다. 그래서이 라인이 존재 lambda m:m.group(0).capitalize()합니까?
re.sub호출 가능한 주어진다은 "교체"로 (예 : 기능), 그 호출에 일치하는 객체를 전달하고 예상하는 실제로 교체로 사용하는 것입니다 문자열을 다시 얻을. 람다가 헷갈 린다면 "긴 버전"이 더 자세한 방법으로 똑같은 일을합니다.
왜 하나 쓰지 않습니까? 다음과 같은 것이 귀하의 요구 사항을 충족시킬 수 있습니다.
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
def camelCase(st):
s = st.title()
d = "".join(s.split())
d = d.replace(d[0],d[0].lower())
return d