簡體   English   中英

替換Python中的不同字符

[英]Replacing different characters in Python

假設您有一個要解析為特定格式的字符串。 這意味着:將所有 ' ', '.', '-', etc with '_'

我知道我可以這樣做:

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

並得到我想要的。 但是,有沒有更清潔的方法? 一種更pythonic方式? 我嘗試將列表解析為replace的第一個參數,但是效果不佳。

使用正則表達式

例如:

import re

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

這是Python教程

使用re

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

使用正則表達式的獎勵解決方案:

>>> keys = [' ', '.', '-']
>>> print ''.join('_' if c in keys else c for c in "Hello----.....    World")
Hello_____________World

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

該答案列出了完成此任務的各種不同方法,並按速度對比了不同的功能和輸入。

如果您要替換幾個字符,則最快的方法是通過鏈接多個替換(正則表達式最慢)來解決問題

如果您想使其更具“ Python風格”,則可以同時兼顧速度 可讀性 ,最好的方法是列出要替換的字符,並循環遍歷它們。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM