替换Python中的不同字符

时间:2016-08-19 20:51:32

标签: python string replace

假设您有一个要解析为特定格式的字符串。这意味着:替换所有 ' ', '.', '-', etc with '_'

我知道我可以这样做:

>s = "Hello----.....    World"
>s = s.replace('-','_').replace('.', '_').replace(' ', '_')
>print s
>Hello_____________World

得到我想要的东西。但是,有更清洁的方式吗?更pythonic方式? 我尝试将列表解析为替换的第一个参数,但这不能很好地工作。

4 个答案:

答案 0 :(得分:2)

使用Regular Expressions

例如:

import re

s = "Hello----.....    World"
print(re.sub(r"[ .-]", "_", s))

这是Python tutorial

答案 1 :(得分:1)

使用re

<script>
    $(document).ready(function () {
        $('.demo_class').click(function () {
            $(this).toggleClass('active').siblings().removeClass('active');
        });
    });
</script>

奖金解决方案使用正则表达式:

>>> import re
>>> print re.sub(' |\.|-', '_',"Hello----.....    World")
Hello_____________World

答案 2 :(得分:1)

您可以使用str.translatestring.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

答案 3 :(得分:0)

This answer列出了各种不同的方法来完成这项任务,以速度对比不同的功能和输入。

如果要替换少数几个字符,最快的方式就是问题的方式,通过链接多个替换,使用正则表达式是最慢的

如果你想让这个更加“pythonic”,利用速度 可读性的最好方法是制作一个列表您要替换的字符,并循环显示它们。

text = "Hello----.....    World"
for ch in [' ', '.', '-']:
    if ch in text:
        text = text.replace(ch,'_')