2012-05-03 56 views
6

Đó là trò chơi mà người dùng có thể nhập giá trị như "Trà đá .." Tôi muốn thao tác chuỗi để trả lại "trà đá" mà không có dấu chấm câu.Làm cách nào để xóa tất cả các dấu câu theo sau một chuỗi?

Tìm giải pháp trăn thanh lịch/đơn giản nhất.

Cố gắng

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

mà hoạt động nếu chỉ có một dấu chấm câu ở cuối. Nhưng nó không phải là tất cả-bao gồm.

Tìm thấy một Java solution:

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

'word.endswith (hoặc '' '') 'không có nghĩa là những gì bạn nghĩ rằng nó. –

+0

Điều đó có nghĩa là gì? – user1186742

+0

Nó có nghĩa là ''. ' hoặc ',' 'được đánh giá để tạo ra' '.'', và nó được truyền cho 'word.endswith'. –

Trả lời

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

Vì vậy, chức năng sẽ là một cái gì đó giống như word = word.rstrip ('?:..,;') Và sau đó trả về từ? Tôi là một người mới, xin lỗi nếu điều này thực sự là cơ bản. – user1186742

+0

Hoặc bạn chỉ có thể trả lại trực tiếp. –

+0

Bạn có ý nghĩa gì khi trả lại trực tiếp? – user1186742

0

Trong trường hợp này, rstrip có lẽ là những gì bạn muốn. Nhưng nói chung, nó không khó để dịch một cái gì đó như thế Java vào Python. Một bản dịch trực tiếp sẽ trông như thế này:

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

Điều cần biết. Nhưng khi tôi thử nó như sau: subject_string = word \t result_string = re.sub ('([az] +) [?:!.,;] *', R '\ 1', từ) Tôi nhận được kết quả "Không" – user1186742

+0

bạn cần trả về result_string trong trường hợp đó, hoặc chỉ 'return re.sub (...)' –

+0

Ah, vâng, hiểu rồi. Cảm ơn bạn! – 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' 
Các vấn đề liên quan