예외가있는 고급 케이스
(즉, 단어는 대문자로 시작하고 나머지 문자는 소문자를 가짐) 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 word
title()
기사가 아닌 경우 기본 방법 을 사용 하여 대소 문자를 문자열로 지정
" ".join
(공백)의 구분자로 목록 요소를 결합합니다.
참고 URL : https://stackoverflow.com/questions/3728655/titlecasing-a-string-with-exceptions
'IT' 카테고리의 다른 글
Xcode 4에서 탭이 작동 비용이 많이 듭니까? (0) | 2020.09.15 |
---|---|
UIScrollView의 가로 스크롤을 사용하는 방법은 무엇입니까? (0) | 2020.09.15 |
다른 div 내에서 첫 번째 div를 선택하는 데 사용할 수있는 CSS 선택 도구 (0) | 2020.09.15 |
JavaFX는 WPF와 어떻게 다릅니 까? (0) | 2020.09.14 |
두 날짜 사이의 날짜 목록 가져 오기 (0) | 2020.09.14 |