[python] 파이썬에서 문자열을 제목 대소 문자로 변환하는 방법은 무엇입니까?

예:

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