В Python 2.6 я могу запустить следующий штраф, чтобы вырезать символы, такие как -()
'(123) 456-7890'.translate(None, '-(), ')
Python2.5 translate не принимает None, как я могу сделать выше в 2.5?
Это возможно с помощью maketrans
:
import string
'(123) 456-7890'.translate(string.maketrans('', ''), '-(), ')
Но вы также можете использовать регулярные выражения, которые более читабельны.
Используйте string.maketrans
с пустыми аргументами, чтобы создать таблицу преобразования идентификаторов:
string.maketrans(from, to)
Вернуть таблицу переводов, подходящую для передачи для перевода(), которая будет отображать каждый символ из в символ в том же положении; от и до должны иметь одинаковую длину.
>>> import string
>>> identity = string.maketrans("", "")
>>> '(123) 456-7890'.translate(identity, '-(), ')
'1234567890'
В качестве альтернативы вы всегда можете хранить только цифры:
def strip_nondigits(text):
return filter(type(text).isdigit, text)
>>> strip_nondigits('(123) 456-7890')
'1234567890'
Это должно быть более устойчивым к ложным символам. type(text)
заставляет его работать и для объектов unicode.
Регулярные выражения.
>>> import re
>>> re.sub('\-|\(|\)| ','','(123) 456-7890')
1234567890