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

时间:2011-02-10 09:44:17

标签: python string

我有大量的文本,包括\ n \ t和\ r \ n等控制字符。 我需要用简单的空间替换它们 - > “”。最快的方法是什么? 感谢

6 个答案:

答案 0 :(得分:24)

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

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

打印

a b c d

编辑:由于这再次变成了关于性能的讨论,这里有一些数字。对于长字符串,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

这大约是40倍。

答案 1 :(得分:9)

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

import re
regex = re.compile(r'[\n\r\t]')
regex.sub(' ', my_str)

答案 2 :(得分:5)

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

答案 3 :(得分:3)

如果要规范化空格(用一个空格替换一个或多个空格字符的运行,并去掉前导和尾随空格),可以使用字符串方法来完成:

>>> text = '   foo\tbar\r\nFred  Nurke\t Joe Smith\n\n'
>>> ' '.join(text.split())
'foo bar Fred Nurke Joe Smith'

答案 4 :(得分:2)

使用正则表达式

re.sub(r'\s+', ' ', '1\n2\r3\t4')

没有正则表达式

>>> ' '.join('1\n\n2\r3\t4'.split())
'1 2 3 4'
>>>

答案 5 :(得分:1)

' S'是要删除特定控制字符的字符串。 由于字符串在python中是不可变的,因此在替换操作之后,您需要将其分配给另一个字符串。

s = re.sub(r' [\ n \ r \ t] *','',s)