从字符串中删除特定控制字符(\n\r\t)

Hos*_*ein 10 python string

我有相当多的文本,包括像\n\t和\ r \n这样的控制字符.我需要用一个简单的空间替换它们 - >"".最快的方法是什么?谢谢

Sve*_*ach 24

我认为最快的方法是使用str.translate():

import string
s = "a\nb\rc\td"
print s.translate(string.maketrans("\n\t\r", "   "))
Run Code Online (Sandbox Code Playgroud)

版画

a b c d
Run Code Online (Sandbox Code Playgroud)

编辑:因为这再次变成了关于性能的讨论,这里有一些数字.对于长字符串,translate()方式比使用正则表达式快:

s = "a\nb\rc\td " * 1250000

regex = re.compile(r'[\n\r\t]')
%timeit t = regex.sub(" ", s)
# 1 loops, best of 3: 1.19 s per loop

table = string.maketrans("\n\t\r", "   ")
%timeit s.translate(table)
# 10 loops, best of 3: 29.3 ms per loop
Run Code Online (Sandbox Code Playgroud)

这大约是40倍.

  • 值得注意的是,Python3中没有string.translate和string.makestrans.基于重新解决方案似乎更好 (3认同)

Mic*_*zcz 10

您也可以尝试正则表达式:

import re
regex = re.compile(r'[\n\r\t]')
regex.sub(' ', my_str)
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

>>> re.sub(r'[\t\n\r]', ' ', '1\n2\r3\t4')
'1 2 3 4'
Run Code Online (Sandbox Code Playgroud)