Python 有没有更有效的方法将此电话号码转换为纯文本?

Python 有没有更有效的方法将此电话号码转换为纯文本?,python,Python,我想将第六位和第七位之间带有括号和连字符的电话号码转换为10个没有格式的号码。这段代码可以做到这一点,但它很笨拙,我想知道是否有更有效的方法 谢谢 phone_number = "(251) 342-7344" phone_number=phone_number.replace("(","") phone_number=phone_number.replace(")","") phone_number=phone_number.replace(" ","") phone_number=phon

我想将第六位和第七位之间带有括号和连字符的电话号码转换为10个没有格式的号码。这段代码可以做到这一点,但它很笨拙,我想知道是否有更有效的方法

谢谢

phone_number = "(251) 342-7344"

phone_number=phone_number.replace("(","")
phone_number=phone_number.replace(")","")
phone_number=phone_number.replace(" ","")
phone_number=phone_number.replace("-","")

print phone_number

您可以使用
str.translate

>>> from string import punctuation,whitespace
>>> strs = "(251) 342-7344"
>>> strs.translate(None, punctuation+whitespace)
'2513427344'
使用
str.isdigit
str.join

>>> "".join([x for x in strs if x.isdigit()])
'2513427344'
定时比较

>>> strs = "(251) 342-7344"*1000
>>> %timeit strs.translate(None, punctuation+whitespace)
10000 loops, best of 3: 116 us per loop                   #clear winner
>>> %timeit "".join([x for x in strs if x.isdigit()])
100 loops, best of 3: 4.42 ms per loop
>>> %timeit re.sub(r'[^\d]', '', strs)
100 loops, best of 3: 2.19 ms per loop
我会选择:

import re

phone_number = "(251) 342-7344"
print re.sub(r'[^\d]', '', phone_number)
# 2513427344

除了数字,你什么都可以用手指剥掉


A电池包括功能性版本

>>> ''.join([x for x in phone_number if x.isdigit()])
'2513427344'

“高效”如果你是用代码行来衡量的,我想。你必须判断你想要的是什么样的效率。

我开始认为你是一个向导。
%timeit
只是速记,还是在你的shell中确实有效?很好!我不知道strs.translate的效率有多高。@Claudiu我正在使用shell,它附带了这样的命令。你可以使用
\D
而不是[^\D]。意思是一样的:除了数字,什么都可以。这么多好的答案…怎么办。。。
>>> ''.join([x for x in phone_number if x.isdigit()])
'2513427344'