2012-05-03 12 views
6

Jest to gra, w której użytkownik może wprowadzić wartość, np. "Mrożona herbata .." Chciałbym manipulować ciągiem, aby zwrócić "mrożoną herbatę" bez znaków interpunkcyjnych.Jak usunąć całą interpunkcję, która następuje po ciągu znaków?

Szukasz najbardziej eleganckiego/najprostszego rozwiązania dla Pythona.

Tried

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

który działa, jeśli jest tylko jeden znak interpunkcyjny na końcu. Ale nie jest to wszystko wszechogarniające.

Znaleziono Java solution:

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

'word.endswith (lub '' '')', nie znaczy to, co myślisz, że to robi. –

+0

Co to znaczy? – user1186742

+0

Oznacza to, że ''.' lub ',' 'jest obliczane w celu wytworzenia' '.'' i jest przekazywane do 'word.endswith'. –

Odpowiedz

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

Tak więc funkcja będzie czymś w rodzaju word = word.rstrip ("?:!.,; '), A następnie zwróci słowo? Jestem nowicjuszem, przepraszam, jeśli to jest naprawdę podstawowe. – user1186742

+0

Lub możesz po prostu zwrócić go bezpośrednio. –

+0

Co masz na myśli, zwracając go bezpośrednio? – user1186742

0

W tym przypadku rstrip jest chyba to, co chcesz. Ale ogólnie rzecz biorąc, nietrudno przetłumaczyć coś takiego jak Java do Pythona. Bezpośredni przekład będzie wyglądać następująco:

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

Dobrze wiedzieć. Ale gdy próbuję go w następujący sposób: subject_string = word \t result_string = re.sub ('([az] +) [?:!.,;] *', R '\ 1', word) Otrzymuję wynik "None" – user1186742

+0

musisz w tym przypadku zwrócić result_string, lub po prostu 'return re.sub (...)' –

+0

Ah, tak, rozumiem. Dziękuję Ci! – 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' 
Powiązane problemy