2013-02-07 44 views
7

Tôi có các chuỗi như '12454v', '346346z'. Tôi muốn xóa tất cả các chữ cái khỏi chuỗi.Xóa các ký tự từ chuỗi

Re hoạt động tốt:

import re 
str='12454v' 
re.sub('[^0-9]','', str) 

#return '12454' 

Có cách nào để làm điều này mà không sử dụng biểu thức thông thường?

+0

@kojiro Tôi đã sửa. –

Trả lời

8
>>> ''.join(filter(str.isdigit, '12454v')) 
'12454' 
4

Trong python 2 đối số thứ hai với phương pháp translate phép bạn chỉ định ký tự để xóa

http://docs.python.org/2/library/stdtypes.html#str.translate

Ví dụ chương trình cho rằng bạn có thể sử dụng None như một bảng dịch để chỉ xóa nhân vật:

>>> 'read this short text'.translate(None, 'aeiou') 
'rd ths shrt txt' 

(Bạn có thể nhận danh sách tất cả các chữ cái ASCII từ mô-đun chuỗi là string.letters .)

Cập nhật: Python 3 cũng có một phương pháp translate, mặc dù nó đòi hỏi một thiết lập hơi khác nhau:

from string import ascii_letters 
tr_table = str.maketrans({c:None for c in ascii_letters}) 
'12345v'.transate(tr_table) 

Đối với hồ sơ, sử dụng bảng dịch bằng Python 2 được nhiều, nhiều nhanh hơn so với tham gia/phương pháp lọc:

>>> timeit("''.join(filter(lambda c:not c.isalpha(), '12454v'))") 
2.698641061782837 
>>> timeit("''.join(filter(str.isdigit, '12454v'))") 
1.9351119995117188 
>>> timeit("'12454v'.translate(None, string.letters)", "import string") 
0.38182711601257324 

Tương tự như vậy bằng Python 3:

>>> timeit("'12454v'.translate(tr_table)", "import string; tr_table=str.maketrans({c:None for c in string.ascii_letters})") 
0.6507143080000333 
>>> timeit("''.join(filter(lambda c:not c.isalpha(), '12454v'))") 
2.436105844999929 
2

Tôi nghĩ bạn có thể thử điều này với .translate phương pháp.

>>> import string 
>>> str='12454v' 
>>> str.translate(None, string.letters) 
'12454' 

Có một câu trả lời rất tốt về phương pháp .translatehere.

1

Đây là một phần nào ít thanh lịch hơn so với những người khác bởi vì nó không sử dụng một chức năng cụ thể và có phần vụng về hơn:

newStr = '' 
myStr='12454v' 
for char in myStr: 
    try: 
     newStr += str(int(char)) 
    except ValueError: 
     pass 
print newStr 

Một lần nữa, đây không phải là cách tốt nhất, nhưng tôi chỉ ném nó ra đó. Tôi đã chuyển đổi nó thành một số int đầu tiên để nó có thể kiểm tra xem có phải là số nguyên hay không. Sau đó, tôi chuyển đổi nó thành một str để nó có thể được thêm vào newStr.

Lưu ý khác, bạn không nên sử dụng str làm tên biến vì nó đổ bóng chức năng được tích hợp str().

Các vấn đề liên quan