前言
测试环境:python3.10.5
python 读取字符串后对字符串进行处理的话,就可能会有去除空格,换行,制表符,回车符的操作,下面我们就分别讨论一下不同情况应该怎么处理。
各种空格的处理
下面我们先传入一段文本,其中普通的空白符号(空格包括全角和半角)。
content = """\r\n\t话 说 天 下 大 势 分 久 必 合 合 久 必 分 \r\n周 末 七 国 分 争 并 入 于 秦 \r\n及 秦 灭 之 后 楚 汉 分 争 又 并 入 于 汉 """
#输出结果
话 说 天 下 大 势 分 久 必 合 合 久 必 分
周 末 七 国 分 争 并 入 于 秦
及 秦 灭 之 后 楚 汉 分 争 又 并 入 于 汉
一. 需要删除所有空白符号
应用场景:判断一个字符串在另一个字符串中
正则替换:\s是不可见字符
import re
content = """\r\n\t话 说 天 下 大 势 分 久 必 合 合 久 必 分 \r\n周 末 七 国 分 争 并 入 于 秦 \r\n及 秦 灭 之 后 楚 汉 分 争 又 并 入 于 汉 """
key = '秦及秦灭之后'
content = re.sub(r'[\s]+', '', content)
print(content) #话说天下大势分久必合合久必分周末七国分争并入于秦及秦灭之后楚汉分争又并入于汉
print(key in content) #True
在网上搜了空格处理之后,大部分都是要对各种空格分别处理,然后我试一下python3.10.5 版本自带的re模块,其实可以都匹配到,包括html中的空格。具体空格分类可以看前言中的网址。
content = u'一\xa0二\u3000三\u2003四\u2002五\u0020六 七'
import re
# content = re.sub(r'[\s]+','',content)
print(content) #一 二 三 四 五 六 七
六和七之间哪个在pycharm可以看到
content = u'一\xa0二\u3000三\u2003四\u2002五\u0020六 七'
import re
content = re.sub(r'[\s]+','',content)
print(content) #一二三四五六七
#上图中的emsp和\u2003是一样的
print(ord(' '),ord('\u2003')) #8195 8195
也就是说,至少在3.10.5版本中,re模块的\s就已经支持对大部分常见空格进行替换了,而不用再额外指定其他空格unicode编码。
二. 删除所有空格,保留回车换行
应用场景:分割字符串,回车换行需要作为每一行的分隔符时
import re
content = """\r\n\t话 说 天 下 大 势 分 久 必 合 合 久 必 分 \r\n周 末 七 国 分 争 并 入 于 秦 \r\n及 秦 灭 之 后 楚 汉 分 争 又 并 入 于 汉 """
#\u0020 英文半角
#\u3000 中文全角
#\t tab键
# print(ord(' ')) #32 半角空格
# print(ord(' ')) #12288 全角空格
content = re.sub(r'[\u3000\u0020\t]+', '', content)
print(content.split('\r\n'))
#['', '话说天下大势分久必合合久必分', '周末七国分争并入于秦', '及秦灭之后楚汉分争又并入于汉']
经过以上两个re模块的实例,应付常见的需求应该没问题了。
三. strip()
应用场景:strip函数以及其衍生函数,最主要用在字符串长度较少,前后有空格的情况,当然也可以给strip函数参数,在字符串替换其他字符(默认不给参数时替换前后的空格)。
四. replace()
应用场景:最好用在替换非空白字符上,因为替换空白字符的话要替换多次,且容易忽略全角空格,导致出错。
总结
长字符串替换的话最好用正则,短字符替换一眼就可以看出来替换的对不对,用哪种方法都行。