web-dev-qa-db-ja.com

Python:文の最後の単語を切り捨てますか?

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

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

  1. (スペースで)リストに分割し、最後のアイテムを削除してから、リストを再連結します。
  2. 正規表現を使用して、最後のWordを置き換えます。

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

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

コード例は大歓迎です。

42
qwerty

実際、すべての単語を分割する必要はありません。 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つの入力文字列が生成されたため)。

129

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

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

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

12
murgatroid99

コンパクトさが好きなら:

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

現在のメソッドを保持する場合は、' '.join(words)を使用してリストを連結します。

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

4
NickAldwin

OR

import re

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

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

3
Wooble

スペースの最後のインデックスを取得し、文字列を接合します

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