2012-05-03 22 views
6

Es para un juego en el que el usuario puede ingresar un valor como "Té helado ..." Me gustaría manipular la cuerda para devolver el "Té helado" sin los signos de puntuación finales.¿Cómo elimino toda la puntuación que sigue a una cadena?

Buscando la solución de python más elegante/simple.

Probamos

def last_character(word): 
    if word.endswith('.' or ','): 
     word = word[:-1] 
    return word 

que funciona si sólo hay una marca de puntuacion al final. Pero no es todo abarcador.

Encontrado un Java solution:

String resultString = subjectString.replaceAll("([a-z]+)[?:!.,;]*", "$1"); 
+0

'word.endswith (o '' '')' no significa lo que usted piensa que lo hace. –

+0

¿Qué significa? – user1186742

+0

Significa que ''.' o ',' 'se evalúa para producir '' .'', y eso se pasa a' word.endswith'. –

Respuesta

14
>>> 'words!?.,;:'.rstrip('?:!.,;') 
'words' 
+0

Entonces, ¿la función sería algo como word = word.rstrip ('?:!.;;') Y luego return word? Soy un novato, me disculpo si esto es realmente básico. – user1186742

+0

O simplemente puede devolverlo directamente. –

+0

¿A qué te refieres con devolverlo directamente? – user1186742

0

En este caso, rstrip es probablemente lo que quiere. Pero, en general, no es difícil traducir algo así como Java en Python. Una traducción directa sería el siguiente:

import re 
subject_string = 'Iced tea..' 
result_string = re.sub('([a-z]+)[?:!.,;]*',r'\1',subject_string) 
+0

Es bueno saberlo. Pero cuando lo intento de la siguiente manera: subject_string = palabra \t result_string = re.sub ('([az] +) [?:!.,; * *', R '\ 1', palabra) Me sale el resultado "Ninguno" – user1186742

+0

necesita devolver result_string en ese caso, o simplemente 'return re.sub (...)' –

+0

Ah, sí, lo tengo. ¡Gracias! – user1186742

0
import string 
s='aaa...,' 
count= 0 
>>> for l in s[::-1]: 
...  if l in string.punctuation: 
...    count = count +1 
...  else: 
...    break 
>>> s[:c] 
'aaa' 
Cuestiones relacionadas