[python] 예외가있는 문자열 케이스

문자열 타이틀 케이스 파이썬에서 표준적인 방법이지만 같은 떠나는 제품 (예 : 단어는 대문자로 시작하는 모든 나머지 맡았다 문자는 소문자가) 거기에 and, inof소문자?



답변

이것에는 몇 가지 문제가 있습니다. 분할 및 결합을 사용하는 경우 일부 공백 문자가 무시됩니다. 기본 제공 대문자 및 제목 메서드는 공백을 무시하지 않습니다.

>>> 'There     is a way'.title()
'There     Is A Way'

문장이 기사로 시작하는 경우 제목의 첫 단어가 소문자로 표시되는 것을 원하지 않습니다.

다음 사항을 염두에 두십시오.

import re
def title_except(s, exceptions):
    word_list = re.split(' ', s)       # re.split behaves as expected
    final = [word_list[0].capitalize()]
    for word in word_list[1:]:
        final.append(word if word in exceptions else word.capitalize())
    return " ".join(final)

articles = ['a', 'an', 'of', 'the', 'is']
print title_except('there is a    way', articles)
# There is a    Way
print title_except('a whim   of an elephant', articles)
# A Whim   of an Elephant


답변

titlecase.py 모듈을 사용하십시오 ! 영어로만 작동합니다.

>>> from titlecase import titlecase
>>> titlecase('i am a foobar bazbar')
'I Am a Foobar Bazbar'

GitHub : https://github.com/ppannuto/python-titlecase


답변

다음과 같은 방법이 있습니다.

>>> mytext = u'i am a foobar bazbar'
>>> print mytext.capitalize()
I am a foobar bazbar
>>> print mytext.title()
I Am A Foobar Bazbar

소문자 기사 옵션이 없습니다. 낮추고 싶은 기사 목록을 사용하여 직접 코딩해야합니다.


답변

Stuart Colville은 문자열을 제목 케이스로 변환하기 위해 John Gruber작성한 Perl 스크립트 의 Python 포트 를 만들었지 만 New York Times Manual of style의 규칙에 따라 작은 단어를 대문자로 사용하지 않고 몇 가지 특별한 경우를 처리하지 않습니다.

이 스크립트의 영리함 :

  • if, in, of, on 등과 같은 작은 단어를 대문자로 표시 하지만 입력에서 잘못 대문자로 표시되면 대문자를 해제합니다.

  • 스크립트는 첫 번째 문자가 아닌 대문자로 된 단어가 이미 올바르게 대문자로 표시된 것으로 가정합니다. 이것은 그들이“iTunes”나 더 나쁜 것은“Itunes”로 바꾸는 대신“iTunes”와 같은 단어를 그대로 두는 것을 의미합니다.

  • 점이있는 단어는 건너 뜁니다. “example.com”및 “del.icio.us”는 소문자로 유지됩니다.

  • 그들은 “AT & T”및 “Q & A”와 같은 이상한 경우를 처리하기 위해 특별히 하드 코딩 된 해킹을 가지고 있으며 둘 다 일반적으로 소문자 여야하는 작은 단어 (at 및 a)를 포함합니다.

  • 제목의 첫 번째와 마지막 단어는 항상 대문자로 표시되므로 “무서워 할 내용 없음”과 같은 입력은 “무서워 할 내용 없음”으로 바뀝니다.

  • 콜론 뒤의 작은 단어는 대문자로 표시됩니다.

여기에서 다운로드 할 수 있습니다 .


답변

capitalize (word)

그래야합니다. 나는 그것을 다르게 얻는다.

>>> mytext = u'i am a foobar bazbar'
>>> mytext.capitalize()
u'I am a foobar bazbar'
>>>

위의 답장에서 말했듯이 사용자 지정 대문자를 만들어야합니다.

mytext = u’i am a foobar bazbar ‘

def xcaptilize(word):
    skipList = ['a', 'an', 'the', 'am']
    if word not in skipList:
        return word.capitalize()
    return word

k = mytext.split(" ")
l = map(xcaptilize, k)
print " ".join(l)

이 출력

I am a Foobar Bazbar


답변

Python 2.7의 제목 메서드에는 결함이 있습니다.

value.title()

‘목수 반환 S 값이 목수 때 길잡이’ 길잡이

가장 좋은 해결책은 아마도 Stuart Colville의 타이틀 케이스를 사용하는 @BioGeek의 솔루션 일 것입니다. @Etienne이 제안한 것과 동일한 솔루션입니다.


답변

 not_these = ['a','the', 'of']
thestring = 'the secret of a disappointed programmer'
print ' '.join(word
               if word in not_these
               else word.title()
               for word in thestring.capitalize().split(' '))
"""Output:
The Secret of a Disappointed Programmer
"""

제목이 대문자로 시작하고 기사와 일치하지 않습니다.