IT

예외가있는 고급 케이스

lottoking 2020. 9. 15. 07:59
반응형

예외가있는 고급 케이스


(즉, 단어는 대문자로 시작하고 나머지 문자는 소문자를 가짐) and. in,, of소문자 같은 기사는 연결된 둡니까?


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

>>> '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

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


스튜어트 콜빌은 문자열을 제목 케이스로 CHAPTER 2하기 위해 존 그루버 (John Gruber)작성한 펄 펼쳐 의 파이썬 포트만들었지 만의 스타일 뉴욕 타임스는 매뉴얼의 규칙에 따라 작은 단어를 대문자 로 사용하지 않고 몇 가지 특별한 경우를 처리하지 않습니다 .

이 펼쳐의 영리함 :

  • 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 '나는 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
"""

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


목록 이해력과 삼항 연산자를 사용한 한 줄

reslt = " ".join([word.title() if word not in "the a on in of an" else word for word in "Wow, a python one liner for titles".split(" ")])
print(reslt)

고장:

for word in "Wow, a python one liner for titles".split(" ") 문자열을 목록으로 분할하고 for 루프를 시작합니다 (목록 이해에서).

word.title() if word not in "the a on in of an" else wordtitle()기사가 아닌 경우 기본 방법 사용 하여 대소 문자를 문자열로 지정

" ".join (공백)의 구분자로 목록 요소를 결합합니다.

참고 URL : https://stackoverflow.com/questions/3728655/titlecasing-a-string-with-exceptions

반응형