2016-03-22 7 views
2

I次の文字列があります。ベストPython的な方法

my_str = "1,123_$ABC_NN&_XX,154440480,YVH?ADXX,,503,TCCTGA,503,TATCCTCT,,,154440480" 

私はすべてのAZ、0-9、ダッシュとアンダースコアと置き換えるEVERYTHINGを維持したいがそうでなければダッシュで。これを行うには最高のPythonの方法は何ですか?

私はそれが動作しますが、その乱雑、これを行っています

my_str.replace('#','-').replace('!','-').replace('"','-').replace('$','-').replace('%','-').replace('^','-').replace('&','-').replace('*','-').replace('(','-').replace(')','-').replace('@','-').replace('~','-').replace(';','-').replace(':','-').replace('[','-').replace(']','-').replace('{','-').replace('}','-').replace('?','-').replace('/','-').replace('>','-').replace('<','-').replace('|','-').replace('\\','-').replace(' ','-') 

答えて

3

あなたが使用することができます。

>>> my_str = "1,123_$ABC_NN&_XX,154440480,YVH?ADXX,,503,TCCTGA,503,TATCCTCT,,,154440480" 
>>> re.sub(r'[^\w-]', '-', my_str) 
'1-123_-ABC_NN-_XX-154440480-YVH-ADXX--503-TCCTGA-503-TATCCTCT---154440480' 

あなたは、複数のハイフンを回避したい場合:

>>> re.sub(r'[^\w-]+', '-', my_str) 
'1-123_-ABC_NN-_XX-154440480-YVH-ADXX-503-TCCTGA-503-TATCCTCT-154440480' 

[^\w-]単語char以外の文字に一致します([a-zA-Z0-9_]とハイフン。

2

それとも、このようにそれを行うことができます。

>>> import re 
>>> re.sub('[^A-Z0-9-_]', '-', my_str) 
'1-123_-ABC_NN-_XX-154440480-YVH-ADXX--503-TCCTGA-503-TATCCTCT---154440480' 
0

あなたはたくさんこれをやっている場合は、変換テーブルを事前に構築し、各文字列に適用できます。

my_trans_list = ['-'] * 256 

for x in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_-': 
    my_trans_list[ord(x)] = x 

my_trans = ''.join(my_trans_list) 

my_str = "1,123_$ABC_NN&_XX,154440480,YVH?ADXX,,503,TCCTGA,503,TATCCTCT,,,154440480" 
print my_str.translate(my_trans) 

これが表示されます::

1-123_-ABC_NN-_XX-154440480-YVH-ADXX--503-TCCTGA-503-TATCCTCT---154440480 

は2.7.6

Pythonでテストされた文字列の多くが処理されている場合、これは非常に高速になります
関連する問題