'Python: Cut off the last word of a sentence?
What's the best way to slice the last word from a block of text?
I can think of
- Split it to a list (by spaces) and removing the last item, then reconcatenating the list.
- Use a regular expression to replace the last word.
I'm currently taking approach #1, but I don't know how to concatenate the list...
content = content[position-1:position+249] # Content
words = string.split(content, ' ')
words = words[len[words] -1] # Cut of the last word
Any code examples are much appreciated.
Solution 1:[1]
Actually you don't need to split all words. You can split your text by last space symbol into two parts using rsplit.
Example:
>>> text = 'Python: Cut off the last word of a sentence?'
>>> text.rsplit(' ', 1)[0]
'Python: Cut off the last word of a'
rsplit
is a shorthand for "reverse split", and unlike regular split
works from the end of a string. The second parameter is a maximum number of splits to make - e.g. value of 1
will give you two-element list as a result (since there was a single split made, which resulted in two pieces of the input string).
Solution 2:[2]
You should definitely split and then remove the last word because a regex will have both more complications and unnecessary overhead. You can use the more Pythonic code (assuming content is a string):
' '.join(content.split(' ')[:-1])
This splits content into words, takes all but the last word, and rejoins the words with spaces.
Solution 3:[3]
If you like compactness:
' '.join(content.split(' ')[:-1]) + ' ...'
Solution 4:[4]
If you want to keep your current method, use ' '.join(words)
to concatenate the list.
You also might want to replace words = words[len[words -1]
with words = words[:-1]
to make use of list slicing.
Solution 5:[5]
OR
import re
print ' '.join(re.findall(r'\b\w+\b', text)[:-1])
Solution 6:[6]
Get last index of space and splice the string
>>> text = 'Python: Cut of the last word of a sentence?'
>>> text[:text.rfind(' ')]
'Python: Cut of the last word of a'
Solution 7:[7]
' '.join(words)
will put the list back together.
Solution 8:[8]
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"
Solution 9:[9]
Enother variant is to use an argument "args*"
For example:
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")
Would output:
"What's g"
"Looks li"
Let’s break this down:
- We have two parameters that our function
truncate_sentences()
defines. The first is alength
parameter that will specify how many characters we want to keep. The second is a parameter calledsentences
that is paired with the unpacking operator, signifying it will take a variable number of arguments. - On each iteration of the function, we are looping through the tuple created by the
sentences
argument (because it is paired with the unpacking operator) and perform a slice on the sentence based on the providedlength
argument. This forces every value in thesentences
tuple to be cut down in length.
Solution 10:[10]
Try Below,
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
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow