Python: отрезать последнее слово предложения? - PullRequest
42 голосов
/ 07 июня 2011

Какой лучший способ вырезать последнее слово из блока текста?

Я могу думать о

  1. Разделить его на список (по пробелам) и удалить последний элемент, а затем повторно объединить список.
  2. Используйте регулярное выражение для замены последнего слова.

В настоящее время я использую подход № 1, но я не знаю, как объединить список ...

content = content[position-1:position+249] # Content
words = string.split(content, ' ')
words = words[len[words] -1] # Cut of the last word

Любые примеры кода приветствуются.

Ответы [ 7 ]

129 голосов
/ 07 июня 2011

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

Пример:

>>> text = 'Python: Cut of the last word of a sentence?'
>>> text.rsplit(' ', 1)[0]
'Python: Cut of the last word of a'

rsplit является сокращением для «обратного разбиения», и в отличие от обычного split работает с конца строки. Второй параметр - это максимальное количество делений, например: значение 1 даст вам двухэлементный список в результате (так как было сделано одно разбиение, что привело к двум частям входной строки).

12 голосов
/ 07 июня 2011

Вы должны определенно разделить и затем удалить последнее слово, потому что регулярное выражение будет иметь больше сложностей и ненужных накладных расходов.Вы можете использовать более Pythonic-код (предполагая, что содержимое - строка):

' '.join(content.split(' ')[:-1])

Это разбивает содержимое на слова, принимает все слова, кроме последнего, и объединяет слова с пробелами.

5 голосов
/ 07 июня 2011

Если вам нравится компактность:

' '.join(content.split(' ')[:-1]) + ' ...'
4 голосов
/ 07 июня 2011

Если вы хотите сохранить текущий метод, используйте ' '.join(words) для объединения списка.

Вы также можете заменить words = words[len[words -1] на words = words[:-1], чтобы использовать нарезку списка.

3 голосов
/ 07 июня 2011

ИЛИ

import re

print ' '.join(re.findall(r'\b\w+\b', text)[:-1])
3 голосов
/ 07 июня 2011

' '.join(words) соберет список обратно.

1 голос
/ 15 ноября 2017

Получить последний индекс пробела и склеить строку

>>> text = 'Python: Cut of the last word of a sentence?'
>>> text[:text.rfind(' ')]
'Python: Cut of the last word of a'
...