delchars = ''.join(c for c in map(chr, range(256)) if not c.isalnum())
(2)每当你想拧一串:
scrunched = s.translate(None, delchars)
安装成本可能比重新编译更有利;边际成本要低得多:
C:\junk>\python26\python -mtimeit -s"import string;d=''.join(c for c in map(chr,range(256)) if not c.isalnum());s=string.printable" "s.translate(None,d)"
100000 loops, best of 3: 2.04 usec per loop
C:\junk>\python26\python -mtimeit -s"import re,string;s=string.printable;r=re.compile(r'[\W_]+')" "r.sub('',s)"
100000 loops, best of 3: 7.34 usec per loop
C:\junk>\python26\python -mtimeit -s"d=''.join(c for c in map(chr,range(256)) if not c.isalnum());s='foo-'*25" "s.translate(None,d)"
1000000 loops, best of 3: 1.97 usec per loop
C:\junk>\python26\python -mtimeit -s"import re;s='foo-'*25;r=re.compile(r'[\W_]+')" "r.sub('',s)"
10000 loops, best of 3: 26.4 usec per loop
我只是出于好奇才给一些功能计时。在这些测试中,我将从字符串
string.printable
(内置string
模块的一部分)中删除非字母数字字符。使用编译的'[\W_]+'
和pattern.sub('', str)
被发现是最快的。使用str.translate()方法。
假设你经常这样做:
(1)创建一个包含要删除的所有字符的字符串:
(2)每当你想拧一串:
安装成本可能比重新编译更有利;边际成本要低得多:
注意:使用string.printable作为基准数据会给模式“[\W\uu]+”带来不公平的优势;所有非字母数字字符都在一组中。。。在典型的数据中,需要进行多个替换:
如果给re.sub更多的工作要做,会发生以下情况:
正则表达式:
相关问题 更多 >
编程相关推荐