2013-06-20 8 views
0

Im вид нового для python. Я пытаюсь удалить первое предложение из строки, используя полную остановку в качестве разделителя. Разделен ли правильный метод для использования в этом случае? Im не получая желаемого результата ...Удаление строки строки Python

def get_summary(self): 
    if self.description: 
     s2 = self.description.split('.', 1)[1] 
     return s2 
    else: 
     return None 
+0

Попробуйте следующее: '. '.join (self.description.split ('. ') [1:]) ' – lolopop

+4

@pythonm: Почему? OP делает это правильно, разбивается только один раз и получает второй элемент. –

+1

Я думаю, что все в порядке, но вам не нужно ссылаться на новое имя переменной, просто верните значение: 'return self.description.split ('.', 1) [1]' –

ответ

1

Прямо сейчас вы можете получить только 2-й Sentance, без символа полной остановки, чтобы решить эту проблему вы можете использовать Join-метод для строк. Это объединит все элементы в списке в одну строку, разделенную на строку.

def get_summary(self): 
    if self.description: 
     s2 = ".".join(self.description.split('.')[1:]) 
     return s2 
    else: 
     return None 

с использованием [1:] даст вам новый элемент, который включает в себя 2-й элемент, и все элементы после этого один в списке.

1

В то время как 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() и, возможно, регулярные выражения - ваши друзья.

Смежные вопросы