用破折号替换任何非A-Z、非数字的最佳Python方式
我有以下字符串:用破折号替换任何非A-Z、非数字的最佳Python方式,python,regex,replace,Python,Regex,Replace,我有以下字符串: my_str = "1,123_$ABC_NN&_XX,154440480,YVH?ADXX,,503,TCCTGA,503,TATCCTCT,,,154440480" 我想保留所有的A-Z、0-9、破折号和下划线,并用破折号替换所有其他内容。做这件事最好的方法是什么 我已经这样做了,它可以工作,但很混乱: my_str.replace('#','-').replace('!','-').replace('"','-').replace('$','-').replac
my_str = "1,123_$ABC_NN&_XX,154440480,YVH?ADXX,,503,TCCTGA,503,TATCCTCT,,,154440480"
我想保留所有的A-Z、0-9、破折号和下划线,并用破折号替换所有其他内容。做这件事最好的方法是什么
我已经这样做了,它可以工作,但很混乱:
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(' ','-')
[代码>我的工程项目.我的工程项目.我的工程项目.工程项目..我的工程项目.我的工程项目.我的工程项目.我的工程项目.我的工程项目.我的工程项目.我的工程项目..我的工程项目.更换((((((353535;;.......................................................................更换...更换........................................................................................“{','-')。替换('}','-')。替换('?','-')。替换(“/”、“-”).replace(“>”、“-”).replace(“您可以使用:
>>> 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\]
和连字符。或者您可以通过以下方式进行匹配:
>>> import re
>>> re.sub('[^A-Z0-9-_]', '-', my_str)
'1-123_-ABC_NN-_XX-154440480-YVH-ADXX--503-TCCTGA-503-TATCCTCT---154440480'
如果您经常这样做,您可以预先构建一个翻译表,然后将其应用于每个字符串。如果正在处理大量字符串,这将非常快:
my_trans_list = ['-'] * 256
for x in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-':
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
在Python 2.7.6中测试