2013-02-07 14 views
7

Ich habe Strings wie '12454v', '346346z'. Ich möchte alle Buchstaben aus Strings löschen.Lösche Buchstaben aus der Zeichenfolge

Re funktioniert:

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

#return '12454' 

Gibt es eine Möglichkeit, dies zu tun, ohne mit regulären Ausdrücken?

+0

@kojiro Ich stehe korrigiert. –

Antwort

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

In Python 2 ist das zweite Argument der translate Methode können Sie Zeichen angeben

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

Das Beispiel zeigt löschen, die Sie None als Übersetzungstabelle nur löschen Zeichen verwenden können:

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

(Sie können eine Liste aller ASCII-Buchstaben aus dem String-Modul als string.letters erhalten .)

aktualisieren: Python 3 hat auch eine translate Methode, obwohl es eine etwas andere Einrichtung erfordert:

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

Für die Aufzeichnung Übersetzungstabellen in Python 2 viel, viel mit schneller als die Level/Filtermethode:

>>> 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 

Ebenso in 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

Ich glaube, Sie dies mit .translate Methode versuchen.

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

Es gibt eine sehr gute Antwort über .translate Methode here.

1

Dies ist ein etwas weniger elegant als die anderen, weil sie nicht eine bestimmte Funktion ist mit und ist etwas klobig:

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

Auch dies nicht beste Weg ist, aber ich warf es einfach aus Dort. Ich konvertierte es zunächst in eine int, so dass es überprüfen kann, ob eine ganze Zahl ist oder nicht. Dann wandle ich es in eine str um, so dass es zu newStr hinzugefügt werden kann.

In einem anderen Hinweis, sollten Sie nicht str als Variablenname verwenden, da es die integrierte Funktion str() Schatten.

Verwandte Themen