背景:基于正则表达式的项目应用。
1.Python字符串之删除空白字符或某些特定字符、字符串
说明:strip()、rstrip()、lstrip()分别用来删除两端、右端、左端连续的空白字符或字符集。
①strip()演示:
s = ‘abc ’
s2 = s.strip()
print(s2)
#abc
s = ‘ hello world ’
s2 = s.strip()
print(s2)
#hello world
s = ‘aaaassddf’
s2 = s.strip(‘a’)
print(s2)
#ssddf
s3 = s.strip(‘af’)
print(s3)
#ssdd
s = ‘aabbccddeeffg’
s2 = s.strip(‘af’)
print(s2)
#bbccddeeffg #字符f不在字符串两侧,所以不能删除
s3 = s.strip(‘aefg’)
print(s3)
#bbccdd
②rstrip()演示:
s = ‘aaaaddfaaa’
s2 = s.rstrip(‘a’)
print(s2)
#aaaaddf
③lstrip()演示:
s = ‘aaaaddfaaa’
s2 = s.lstrip(‘a’)
print(s2)
#ddfaaa
2.删除单个固定位置字符:切片+拼接
s = ‘abc:123’
s1 = s[:3] +s[4:]
print(s1)
#abc123
3.删除任意位置字符同时删除多种不同字符:replace(),re.sub()
s = ‘abc\t123\txyz’
print(s.replace(‘\t’,’ ’))
#abc 123 xyz
s = ‘abc\n123\txyz\r’
print(re.sub(‘[\r\n\t]’,’ ‘ ’,s))
#abc 123 xyz
4.同时删除多种不同的字符:translate()
translate()方法根据参数table给出的表(包含256个字符)转换字符串的字符,要过滤掉的字符放到deletechars参数中。
translate()方法语法:
str.translate(table)
bytes.translate(table,delete)
bytearray.translate(table,delete)
①str.translate(table)方法:
Ⅰ.映射关系建立:maketrans()
intab = ‘aeiou’
outtab = ‘12345’
trantab =str.maketrans(intab,outtab)
print(str.maketrans(‘aeiou’,’12345’))
#
Ⅱ.将其转换成字符串:
str = ‘this isstring example….wow!’
print(str.translate(trantab)+ ‘\n’)
#th3s 3s str3ng 2x1mpl2....w4w!
②bytes.translate(table,delete)方法:
bytes_test =bytes.maketrans(b’run’,b’RUN’)
bytes_p = b’ruoon’
print(bytes_p.translate(bytes_test,b’o’))
#b’RUN’
5.Python字符串前加u,r,b的含义?
u:表示Unicode字符串,万国码。
r:表示非转义字符,原始字符串。
b:bytes,以字节为单位的数据类型。
说明:
①python3中默认的str是(python 2里面的) Unicode,bytes是(python 2)的str,b‘’前缀代表的就是bytes
②在python 3以后,字符串和bytes类型就彻底分开了。字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。
str与bytes之间的类型转换如下:
str to bytes:bytes(s,encoding = ‘utf-8’)
bytes to str:str(b,encoding = ‘utf-8’)
字符的概念?
字符是指计算机中所使用的字母、数字、字和符号。在不同的编码中,每个字符所需要的存储空间是不同的。ASCii码中,一个英文字符需要1Bytes;GB 2312编码或GBK编码中,一个汉字字符存储需要2Bytes;UTF-8编码中,一个英文需要1Bytes,一个汉字字符需要3-4Bytes;UTF-16中,一个英文或汉字都需要2Bytes。特别的,在UTF-32编码中,任何字符存储都需要4个字节。
正则动手:从某网站表格直接拷贝数据如下,请自如的进行剪切。
拷贝数据
分析代码格式:数字 + 学校名 + 实数 + 星级 + 整数
基础正则形式:(\d+)+\s+([\u4E00-\u9FA5])+\s+(\d+(\.\d)?)+\s+(\d+★)+\s+(\d)
所以现在想要几项直接在此基础上更改即可。
原始代码
打印结果
整体感觉而言,正则对于处理格式规范的字符串或文字是十分友好的,嗯..话说如果文件输出是我们自己定义的话,那格式规范就不存在问题了。当然,对于格式不那么规范的字符串,正则也还是有办法处理的。
这算是我强迫自己写的第一个简单的正则表达式把,不一定具有什么意义或是值得学习的地方,但至少对于一般的字符串的处理或是查找应该没有什么太大的问题了。正则的掌握率差不多在40%左右吧,其余带括号的那些...用得着时再说。
老规矩,咱们吸喵一只!
领取专属 10元无门槛券
私享最新 技术干货