Питон: отрезать последнее слово предложения?

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

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

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

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

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

Любые примеры кода очень ценятся.

10 ответов

Решение

На самом деле вам не нужно разделять все слова. Вы можете разделить ваш текст по последнему символу пробела на две части, используя 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 в результате вы получите двухэлементный список (так как был сделан один сплит, что привело к двум частям входной строки).

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

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

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

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

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

ИЛИ ЖЕ

import re

print ' '.join(re.findall(r'\b\w+\b', text)[:-1])

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

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

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

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

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

              
def replace_ending(sentence, old, new):
    S1 = sentence
    O1 = old
    N1 = new
    # Check if the old string is at the end of the sentence 
    if O1 in S1:
        # Using i as the slicing index, combine the part
        # of the sentence up to the matched string at the 
        # end with the new string
        i = S1.rsplit(' ',1)[0] + str(" ") + N1     
        new_sentence = i
        return new_sentence

    # Return the original sentence if there is no match 
    return sentence
    
print(replace_ending("It's raining cats and cats", "cats", "dogs")) 
# Should display "It's raining cats and dogs"

Другой вариант - использовать аргумент «args*».

Например:

      def truncate_sentences(length, *sentences):
  for sentence in sentences:
    print(sentence[:length])

#call function

truncate_sentences(8, "What's going on here", "Looks like we've been cut off")

Выведет:

      "What's g"
"Looks li"

Давайте разберем это:

  1. У нас есть два параметра, которые наша функция truncate_sentences()определяет. Первый - это параметр, который указывает, сколько символов мы хотим сохранить. Второй - это вызываемый параметр, который связан с оператором распаковки, что означает, что он будет принимать переменное количество аргументов.
  2. На каждой итерации функции мы перебираем кортеж, созданный аргументом (потому что он связан с оператором распаковки), и выполняем срез предложения на основе предоставленного lengthаргумент. Это заставляет каждое значение в sentences кортеж нужно урезать в длину.

Попробуйте ниже,

      def replace_ending(sentence, old, new):
# Check if the old string is at the end of the sentence 
if sentence.endswith(old):
    # Using i as the slicing index, combine the part
    # of the sentence up to the matched string at the 
    # end with the new string
    i = sentence.rsplit(' ',1)[0] + str(" ")
    new_sentence = i + new
    return new_sentence

# Return the original sentence if there is no match 
return sentence
Другие вопросы по тегам