Вопрос

Есть ли стандартный путь в Python для строки Titlecase a a one (то есть слова начинаются с прописных символов, все оставшиеся оборудованные символы имеют строчные буквы), но оставляя статьи, такие как 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

Нет варианта строчных букв. Вы должны были бы кодировать, что самостоятельно, наверное, используя список статей, которые вы хотите снизить.

Стюарт Колвилл сделал порт Python из Сценарий Perl, написанный Джоном Грубер Чтобы преобразовать строки в заголовочный случай, но избегает заглазывания мелких слов на основе правил из Руководства New York Times по стилю, а также для общественного питания для нескольких особых случаев.

Некоторые из умных сценариев:

  • они заглавили, как Если, в, о, на, и т. Д., Но не будет зафиксировать их, если они ошибочно капитализируются на входе.

  • Сценарии предполагают, что слова с заглавными буквами, отличными от первого символа, уже правильно заглавны. Это означает, что они покинут слово «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 я 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()

вернет плотникС Помощник, когда ценность является плотникомс Ассистент

Лучшим решением, вероятно, является тем, кто из @biogeek использует Titlecase из Stuart Colville. Который является тем же решением, предложенным @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(" ") Разбивает строку в список и инициирует A для LOOP (в порядке списка)

word.title() if word not in "the a on in of an" else word Использует нативный метод title() к названию корпус строка, если это не статья

" ".join Присоединяется к элементам списка с шаператором (пробел)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top