一、问题
最近在处理数据时,想把文本内所有空格删掉,于是使用了常用的replace(' ','')去替换,然而奇怪的事情发生了,看输出结果却好像没变化,文本内容如下:
a="""
第 1 章 毫厘千里之差-大 O 概念
1.1 算法的规范化和量化度量
1.2 大数和数量级的概念
1.3 怎样寻找好的算法
1.4 关于排序的讨论
第 2 章 逆向思考-从递推到递归
2.1 递归:计算思维的核心
2.2 遍历:递归思想的典型应用
2.3 堆栈和队列:遍历的数据结构
2.4 嵌套:自然语言的结构特征"""
b = a.replace(' ','')
print(b)
二、结果&分析
输出结果如下,看上去好像空格都还在,其实可以看到图中标红线的地方与原文本对比确实去除了空格,故经分析认为这种情况大概率是因为此“空格”非彼“空格”:
三、处理方法
我复制了一个这些没去掉的“空格”,再试了一次replace。
根据下面这两行代码结尾括号的位置应该勉强能看得出这两种空格不一样吧。其实这两种空格一种是半角空格(英文状态下,代码中常用的),一种是全角空格(中文状态下)
b = a.replace(' ','')
c = b.replace(' ','')
print(c)
四、处理结果
运行上述两行代码:完美
补充 1:空格说明
关于空格的不同其实有三种,如下表列出
(参考三种空格unicode(\u00A0,\u0020,\u3000)表示的区别 - 简书):
种类 | 字符 | 空格名称 | 空格说明 |
1 | \u00A0 | 不间断空格 | 主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space |
2 | \u0020 | 半角空格 | 英文状态下的空格,代码中常用的 |
3 | \u3000 | 全角空格 | 中文状态下的空格,中文文章中常用的 |
因此在写代码中也可以直接使用,与上述效果是一样的
b = a.replace('\u0020','')
c = b.replace('\u3000','')
补充2:split去空格
效果与replace一样,原理就是以空格分割,再把所有分割的内容连接起来。
b = ''.join(a.split(' '))
c = ''.join(b.split(' '))
print(c)
b1 = ''.join(a.split('\u0020'))
c1 = ''.join(b1.split('\u3000'))
print(c1)
如有侵权或内容有误可及时联系我!!