如果您正在寻找效率。使用翻译功能是最快的。
它可用于快速替换字符和/或删除它们。
import string
delete_table = string.maketrans(
string.ascii_lowercase, ' ' * len(string.ascii_lowercase)
)
table = string.maketrans('', '')
"Agh#$%#%2341- -!zdrkfd".translate(table, delete_table)
在 python 2.6 中:你不再需要第二张表了
import string
delete_table = string.maketrans(
string.ascii_lowercase, ' ' * len(string.ascii_lowercase)
)
"Agh#$%#%2341- -!zdrkfd".translate(None, delete_table)
这种方法比任何其他方法都快。当然,您需要将 delete_table 存储在某处并使用它。但即使你不存储它并每次都构建它,它仍然会比迄今为止其他建议的方法更快。
为了确认我的说法,这里是结果:
for i in xrange(10000):
''.join(c for c in s if c.islower())
real 0m0.189s
user 0m0.176s
sys 0m0.012s
在运行正则表达式解决方案时:
for i in xrange(10000):
re.sub(r'[^a-z]', '', s)
real 0m0.172s
user 0m0.164s
sys 0m0.004s
[根据要求]如果您预编译正则表达式:
r = re.compile(r'[^a-z]')
for i in xrange(10000):
r.sub('', s)
real 0m0.166s
user 0m0.144s
sys 0m0.008s
运行 translate 方法的次数相同:
real 0m0.075s
user 0m0.064s
sys 0m0.012s