代码之家  ›  专栏  ›  技术社区  ›  Thierry Lam

什么是python2.5等价于python2.6翻译没有作为第一个参数?

  •  1
  • Thierry Lam  · 技术社区  · 14 年前

    在Python2.6中,我可以运行下面的fine来去掉如下字符 -()

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

    python2.5 translate不接受none,我如何在2.5中执行上述操作?

    4 回复  |  直到 14 年前
        1
  •  3
  •   AndiDog    14 年前

    这应该是可能的 maketrans :

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

    但也可以使用可读性更强的正则表达式。

        2
  •  3
  •   gimel    14 年前

    使用 string.maketrans 使用空参数创建 身份转换表 :

    string.maketrans(from, to)

    返回一个适合传递到translate()的转换表,该表将from中的每个字符映射到to中相同位置的字符;from和to必须具有相同的长度。

    >>> import string
    >>> identity = string.maketrans("", "")
    >>> '(123) 456-7890'.translate(identity, '-(), ')
    '1234567890'
    
        3
  •  1
  •   tzot    14 年前

    作为替代方案,您始终只能保留数字:

    def strip_nondigits(text):
        return filter(type(text).isdigit, text)
    
    >>> strip_nondigits('(123) 456-7890')
    '1234567890'
    

    这应该是更强大的对抗虚假字符。这个 type(text) 使它也适用于Unicode对象。

        4
  •  0
  •   Mark    14 年前

    正则表达式。

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