Pythonに文字列のタイトルケース(つまり、単語は大文字で始まり、残りの大文字と小文字はすべて小文字になります)に、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'
これらの方法があります:
>>> 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はPython port of John Gruberによって書かれたPerlスクリプト を作成し、文字列をタイトルケースに変換しますが、小さな単語ベースの大文字化を回避しますスタイルのニューヨークタイムズマニュアルの規則に加えて、いくつかの特別なケースに対応しています。
これらのスクリプトの巧妙さの一部:
if、in、of、onなどの小さな単語を大文字にしますが、入力で誤って大文字を使用した場合は大文字を削除します。
スクリプトは、最初の文字以外の大文字が大文字の単語はすでに正しく大文字になっていると想定しています。これは、「iTunes」や、さらに悪いことに「iTunes」に変換するのではなく、「iTunes」のようなWordだけを残すことを意味します。
行ドットのある単語はスキップします。 「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のtitleメソッドには欠陥があります。
value.title()
値がCarpenterの場合、Carpenter '[〜#〜] s [〜#〜] Assistantを返しますs Assistant
最適なソリューションは、おそらく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
"""
タイトルは大文字のWordで始まり、記事と一致しません。
リスト内包表記と三項演算子を使用したワンライナー
_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
_は、リスト要素を(スペース)の区切り文字で結合します