2011-06-07 49 views
33

¿Cuál es la mejor manera de cortar la última palabra de un bloque de texto?Python: cortar la última palabra de una oración?

me ocurre

  1. Dividir a una lista (por espacios) y eliminar el último elemento, a continuación, reconcatenating la lista.
  2. Use una expresión regular para reemplazar la última palabra.

Actualmente estoy tomando el enfoque # 1, pero no sé cómo concatenar la lista ...

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

Cualquier ejemplos de código son muy apreciados.

Respuesta

105

En realidad, no es necesario dividir todas las palabras. Puede dividir el texto por el último símbolo de espacio en dos partes usando rsplit.

Algunos ejemplos:

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

rsplit es una abreviatura de "agrupamiento", y, a diferencia regulares split obras desde el final de una cadena. El segundo parámetro es un número máximo de divisiones para hacer, p. valor de 1 le dará una lista de dos elementos como resultado (ya que hubo una sola división hecha, que dio como resultado dos partes de la cadena de entrada).

+2

Con algunas de las otras respuestas si siente que es necesario para tener en cuenta que rsplit es división inversa (no división regex) y el 1 es maxsplit. –

+1

@ duckman_1991 Buen punto: extendió la respuesta. –

2

' '.join(words) volverá a poner la lista.

4

Si desea mantener su método actual, use ' '.join(words) para concatenar la lista.

También es posible que desee reemplazar words = words[len[words -1] con words = words[:-1] para hacer uso de list slicing.

7

Definitivamente debe dividir y luego eliminar la última palabra porque una expresión regular tendrá más complicaciones y una sobrecarga innecesaria. Usted puede utilizar el código sea más Pythonic (suponiendo que el contenido es una cadena):

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

Esto divide el contenido en palabras, se lleva todo, pero la última palabra y se une a las palabras con espacios.

5

Si te gusta compacidad:

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

O

import re 

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

Supongo que regex le dará beneficios en caso de que su palabra se divida no solo por espacios en blanco. De lo contrario, rsplit es tu elección. –

0

acceder al último índice del espacio y el empalme de la cadena

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