В то время как split()
верен, он не является оптимальным: он будет бесполезно разбивать весь текст, и вам нужно только первое вхождение.
Использование partition()
, который вернет вам 3-кортеж:
first_sentence, separator, the_rest = text.partition('.') # or '. '
# if you don't care about the first sentence, it can be written shorter:
_, _, the_rest = text.partition('.')
Обратите внимание, что если нет сепаратора (полная остановка) в тексте, он отрубит весь текст, и оставить вас с пустым строка. Если вы хотите, чтобы справиться с этим более изящно, попробовать что-то вроде этого:
def chopFirstSentence(text):
first_sentence, _, the_rest = text.partition('. ')
return the_rest or first_sentence
Это работает, потому что если the_rest
пусто было бы оценить, False
и first_sentence
будет возвращен тогда. Если the_rest
не пуст, вычисление or
будет short-circuit и немедленно вернется the_rest
.
Также обратите внимание, что приведенный выше алгоритм наивен; это сломается на таких вещах, как «Сент-Луис» или «Подполковник» или «cf.foo», которые, очевидно, не имеют встроенных разрывов предложений. Вы можете исключить большинство ложных срабатываний такого рода, проверив последнее слово. Тогда find()
/rfind()
и, возможно, регулярные выражения - ваши друзья.
Попробуйте следующее: '. '.join (self.description.split ('. ') [1:]) ' – lolopop
@pythonm: Почему? OP делает это правильно, разбивается только один раз и получает второй элемент. –
Я думаю, что все в порядке, но вам не нужно ссылаться на новое имя переменной, просто верните значение: 'return self.description.split ('.', 1) [1]' –