我有很多包含控制字符,如 \n、\t 和 \r 的文本。我需要用一个简单的空格--> " " 来替换它们。最快的方法是什么?谢谢。
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
import re
regex = re.compile(r'[\n\r\t]')
regex.sub(' ', my_str)
regex.sub(...)
和 s.translate(string.maketrans(...))
还是仅仅和 s.translate(preparedTrans)
? - eumiro>>> re.sub(r'[\t\n\r]', ' ', '1\n2\r3\t4')
'1 2 3 4'
>>> text = ' foo\tbar\r\nFred Nurke\t Joe Smith\n\n'
>>> ' '.join(text.split())
'foo bar Fred Nurke Joe Smith'
使用正则表达式
re.sub(r'\s+', ' ', '1\n2\r3\t4')
不使用正则表达式
>>> ' '.join('1\n\n2\r3\t4'.split())
'1 2 3 4'
>>>
my_string
是你想要删除特定控制字符的字符串。
由于Python中的字符串是不可变的,在替换操作之后,你需要将其赋给另一个字符串或重新赋值:
my_string = re.sub(r'[\n\r\t]*', '', my_string)
foo\r\nbar
,您是想用两个空格替换\r\n
还是只用一个? - John Machin