可以使用str.translate和string.maketrans这将是不链接调用等最有效的方法做到这一点..:
In [6]: from string import maketrans
In [7]: s = "Hello----..... World"
In [8]: table = maketrans(' .-',"___")
In [9]: print(s.translate(table))
Hello_____________World
时序:
In [12]: %%timeit
....: s = "Hello----..... World"
....: table = maketrans(' .-',"___")
....: s.translate(table)
....:
1000000 loops, best of 3: 1.14 µs per loop
In [13]: timeit s.replace('-','_').replace('.', '_').replace(' ', '_')
100000 loops, best of 3: 2.2 µs per loop
In [14]: %%timeit
text = "Hello----..... World"
for ch in [' ', '.', '-']:
if ch in text:
text = text.replace(ch,'_')
....:
100000 loops, best of 3: 3.51 µs per loop
In [18]: %%timeit
....: s = "Hello----..... World"
....: re.sub(r"[ .-]", "_", s)
....:
100000 loops, best of 3: 11 µs per loop
即使预编译模式离开10μs所以正则表达式是迄今为止效率最低的方法。
In [20]: patt= re.compile(r"[ .-]")
In [21]: %%timeit
s = "Hello----..... World"
patt.sub("_", s)
....:
100000 loops, best of 3: 9.98 µs per loop
预创建表得到我们失望到纳秒:
In [22]: %%timeit
s = "Hello----..... World"
s.translate(table)
....:
1000000 loops, best of 3: 590 ns per loop
这是不正确,最快的方式是不是链接,也做'如果CH文本'是多余的,当你可以只'文本= text.replace(ch,'_')',如果没有任何东西可以替换,任何东西都不会被替换 –