59

テキストのブロックから最後の単語を切り取る最良の方法は何ですか?

私は考えることができます

  1. それを(スペースで)リストに分割し、最後の項目を削除してから、リストを再連結します。
  2. 正規表現を使用して最後の単語を置き換えます。

現在、アプローチ#1を取っていますが、リストを連結する方法がわかりません...

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

コード例は大歓迎です。

4

10 に答える 10

173

実際には、すべての単語を分割する必要はありません。rsplitを使用して、最後のスペース記号でテキストを 2 つの部分に分割できます。

いくつかの例:

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

rsplitは「逆分割」の省略形であり、通常とは異なりsplit、文字列の最後から機能します。2 番目のパラメーターは、作成する分割の最大数です。たとえば、 の値は1、結果として 2 つの要素のリストを返します (1 回の分割が行われ、入力文字列の 2 つの部分が得られたため)。

于 2011-06-07T14:32:41.623 に答える
17

正規表現には複雑さと不要なオーバーヘッドの両方があるため、必ず分割して最後の単語を削除する必要があります。より Pythonic コードを使用できます (コンテンツが文字列であると仮定します)。

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

これにより、コンテンツが単語に分割され、最後の単語を除くすべての単語が取得され、単語がスペースで再結合されます。

于 2011-06-07T14:32:54.633 に答える
6

コンパクトさが好きなら

' '.join(content.split(' ')[:-1]) + ' ...'
于 2011-06-07T14:35:43.880 に答える
4

また

import re

print ' '.join(re.findall(r'\b\w+\b', text)[:-1])
于 2011-06-07T14:36:30.273 に答える
4

現在の方法を維持したい場合は、 を使用' '.join(words)してリストを連結します。

リストのスライスを利用するためwords = words[len[words -1]にに置き換えることもできます。words = words[:-1]

于 2011-06-07T14:31:33.567 に答える
3

' '.join(words)リストを元に戻します。

于 2011-06-07T14:28:29.210 に答える
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"

于 2020-12-19T01:54:43.483 に答える