Python:切断句子的最后一个字?

时间:2011-06-07 14:26:36

标签: python split concatenation word text-segmentation

从一个文本块中切出最后一个单词的最佳方法是什么?

我能想到

  1. 将其拆分为一个列表(按空格)并删除最后一项,然后重新合并列表。
  2. 使用正则表达式替换最后一个单词。
  3. 我目前正在采用方法#1,但我不知道如何连接列表...

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

    非常感谢任何代码示例。

8 个答案:

答案 0 :(得分:125)

实际上你不需要拆分所有单词。您可以使用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的值将为您提供两个元素的列表(因为只进行了一次拆分,这导致了两个输入字符串)。

答案 1 :(得分:11)

你绝对应该拆分然后删除最后一个单词,因为正则表达式会带来更多的复杂性和不必要的开销。您可以使用更多的Pythonic代码(假设内容是一个字符串):

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

这会将内容拆分为单词,除了最后一个单词之外的所有单词,并使用空格重新加入单词。

答案 2 :(得分:5)

如果你喜欢紧凑:

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

答案 3 :(得分:4)

如果您想保留当前的方法,请使用' '.join(words)连接列表。

您还可能希望将words = words[len[words -1]替换为words = words[:-1]以使用列表切片。

答案 4 :(得分:3)

' '.join(words)会将列表重新组合在一起。

答案 5 :(得分:3)

OR

import re

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

答案 6 :(得分:1)

获取空间的最后一个索引并拼接字符串

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

答案 7 :(得分:1)

        
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"