Питон: отрезать последнее слово предложения?
Какой лучший способ вырезать последнее слово из блока текста?
Я могу думать о
- Разделите его на список (по пробелам) и удалите последний элемент, а затем повторно объедините список.
- Используйте регулярное выражение для замены последнего слова.
В настоящее время я использую подход № 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'
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"
Давайте разберем это:
- У нас есть два параметра, которые наша функция
truncate_sentences()
определяет. Первый - это параметр, который указывает, сколько символов мы хотим сохранить. Второй - это вызываемый параметр, который связан с оператором распаковки, что означает, что он будет принимать переменное количество аргументов. - На каждой итерации функции мы перебираем кортеж, созданный аргументом (потому что он связан с оператором распаковки), и выполняем срез предложения на основе предоставленного
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