从字符串中删除特定控制字符(\n \r \t)
我有一大堆文本,其中包含一些控制字符,比如 \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倍。