Что Python2.5 эквивалент Python2.6 переводится с None в качестве первого параметра?

1

В Python 2.6 я могу запустить следующий штраф, чтобы вырезать символы, такие как -()

'(123) 456-7890'.translate(None, '-(), ')

Python2.5 translate не принимает None, как я могу сделать выше в 2.5?

Теги:

4 ответа

3
Лучший ответ

Это возможно с помощью maketrans:

import string
'(123) 456-7890'.translate(string.maketrans('', ''), '-(), ')

Но вы также можете использовать регулярные выражения, которые более читабельны.

  • 0
    Хороший ответ, больше в духе вопроса!
3

Используйте string.maketrans с пустыми аргументами, чтобы создать таблицу преобразования идентификаторов:

string.maketrans(from, to)

Вернуть таблицу переводов, подходящую для передачи для перевода(), которая будет отображать каждый символ из в символ в том же положении; от и до должны иметь одинаковую длину.

>>> import string
>>> identity = string.maketrans("", "")
>>> '(123) 456-7890'.translate(identity, '-(), ')
'1234567890'
1

В качестве альтернативы вы всегда можете хранить только цифры:

def strip_nondigits(text):
    return filter(type(text).isdigit, text)

>>> strip_nondigits('(123) 456-7890')
'1234567890'

Это должно быть более устойчивым к ложным символам. type(text) заставляет его работать и для объектов unicode.

0

Регулярные выражения.

>>> import re
>>> re.sub('\-|\(|\)| ','','(123) 456-7890')
1234567890

Ещё вопросы

Сообщество Overcoder
Наверх
Меню