python - 用破折号替换任何非 A-Z、非数字的最佳 Python 方式

标签 python regex replace

我有以下字符串:

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

我想保留所有 A-Z、0-9、破折号和下划线,并用破折号替换其他所有内容。执行此操作的最佳 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(' ','-')

最佳答案

您可以使用:

>>> 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-] 匹配任何非单词字符的字符(包括 [a-zA-Z0-9_] 和连字符。

关于python - 用破折号替换任何非 A-Z、非数字的最佳 Python 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36160640/

相关文章:

javascript - 正则表达式字符串替换

perl - 如何删除文件中的某些换行符

python - 我如何处理这种情况 : 'n/a' shows up as 'nan' in pandas dataframe, 但无法对其进行字符串匹配并替换

python - 为什么某些线条样式在 matplotlib 中不起作用?

java - 如何使用在 Python API 中计算和保存的 H2OModel

python - PyQt:使用线程访问对象

javascript - 如何在 JavaScript 中将字符串限制为一组特定的字符?

python - brew 安装Python/matplotlib不工作: No module named _tkinter

python - 如何将具有不规则列的html代码转换为嵌套的json文件?

regex - 限制单词长度的 Perl 正则表达式