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

11 投票
6 回答
31982 浏览
提问于 2025-04-16 11:33

我有一大堆文本,其中包含一些控制字符,比如 \n(换行)、\t(制表符)和 \r(回车)。我想把它们都替换成一个简单的空格——也就是 " "。请问有什么最快的方法可以做到这一点?谢谢!

6 个回答

5

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误信息。这些问题可能会让人感到困惑,尤其是对于刚开始学习编程的人来说。

当你在编写代码时,可能会用到一些特定的工具或者库,这些工具可以帮助你更轻松地完成任务。但是,如果这些工具没有正确安装或者配置,就可能会导致代码无法正常工作。

另外,编程语言本身也有一些规则和语法,如果不小心犯了错误,比如拼写错误或者漏掉了某个符号,代码也会出错。

所以,遇到问题时,首先要仔细检查自己的代码,看看有没有什么地方写错了。然后,可以查阅相关的文档或者在网上搜索一下,看看有没有人遇到过类似的问题,找到解决办法。

总之,编程是一项需要耐心和细心的工作,遇到问题时不要着急,慢慢分析,通常都能找到解决的办法。

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

你也可以试试正则表达式:

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

我觉得最快的方法是使用 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倍。

撰写回答