字符串
一、基础操作
1、拼接
“+”
2、计算长度
len(s)
/*
数字,英文,小数点、下划线、空格占一个字节
汉字占2-4个字节(GBK-2)(UTF-8-3/4)
*/
3、截取
s[st:ed:step]
4、分割、合并字符串
s.split(分割符,分割次数)//如果没有指定分隔符,也不能指定分割次数
s1=分隔符.join(iterable)
/*
将多个字符串采用固定的分隔符连接在一起
iterable表示可迭代对象
第一个迭代元素前不加分隔符
*/
5、检索
s.count(sub[st,ed])//一个字符串在另一个字符串中出现的次数
s.find(sub[st,ed])//子字符串在字符串中首次出现的位置,不存在的识货返回-1
s.index(sub[st,ed])//找位置,不存在抛出异常
s.startwith(pre[st,ed])//字符串是否以指定字符串开头
s.endwith(suf[st,ed])//字符串是否以指定字符串结尾
6、大小写转换
s.lower()
s.upper()
7、去空格和特殊字符
s.strip(chars)//去掉字符串左右两侧的空格和特殊字符
s.lstrip(chars)//去掉字符串左侧的空格和特殊自促
s.rstrip(chars)//去掉字符串右侧的空格和字符串
8、格式化
方式一:‘%[-][+][0][m][.n]格式化字符串’%exp
/*
- 左对齐,正数前方无符号,负数前面加负号
+ 右对齐,正数前方加正号,负数前方加负号
0 右对齐,正数前方无符号,负数前方加负号
m 占有宽度
.n 表示在小数点后保留的位数
格式化字符串 %s,%c,%d,%x,%f,%r,%o,%e,%E,%%
exp 要转换的项
*/
方式二:s.format(args)
/*
s即模板—{[index] [ : {[[fill]align] [sign] [#] [width][.precision][type]}
args表示要转换的项
*/
二、编码转换
-
ASCII码
仅对10个数字、26个大写英文字母、26个小写英文字母、一些其他符号进行了编码。最多只能表示256个符号,每个字符占一个字节
-
GBK编码
是我国制定的中文编码标准。规定英文字母占1个字节,中文字符占2个字节
-
UTF-8
国际通用的编码,对全世界所有国家使用的字符都进行了编码。英文字符占1个字节,中文占3个字节 Python3.x中,默认采用UTF-8,有效解决了中文乱码的问题
-
字符串类型
- str—表示Unicode字符(ASCII或者其他),一个字符对应若干个字节
- bytes—表示二进制数据
- str类型和bytes类型之间可以通过encode()和decoed()方法进行转换,这两个方法是互逆的过程
-
//这两个方法都不会改变原值,需要定义一个类型去接收 //encoding指定转码的方式 str.encode([encoding='utf-8'][,errors="strict"])//将字符串转换为二进制数据,str对象的方法,俗称“编码” bytes.decode([encoding='utf-8'][errors="strict"])//将二进制数据转换为字符串,bytes对象的方法,俗称“解码” /* eg: str="是你呀",encoding='UTF-8' bytes=b'\xe6\x98\xaf\xe4\xbd\xa0\xe5\x91\x80' 解码和编码转换时,采用的转码方式要一致 */
三、正则表达式
-
查找符合某些规则的字符串
-
元字符(这是用来匹配单个字符的呦)
//使用方法—— ^s1 //s是否是以字符串s1开头——这是行定位符,不是元字符,用来匹配字符串的 s1$ //s是否是以字符串s1结尾——行定位符,不是元字符,用来匹配字符串 s1 //s中是否包含子串s1——匹配字符串的 //以下才是元字符 . //匹配除换行符以外的任意字符——“x\ny”,可匹配字符x、y \w //匹配字母、数字、下划线或汉字——"x\n_1",可匹配字符x、_、1 \W //匹配除字母、数字、下划线或汉字以外的字符——“x\n_1”,可匹配字符\n \s //匹配单个的空白符——“x\n\t 1”,可匹配字符\n、 、\t \S //匹配除单个空白符以外的所有字符——“x\n\t 1”,可匹配字符x、1 \b //匹配单词的开始或结束——“i like pyhton ”,\bp与的单词python匹配 \d //匹配数字——“x\n_1”,\d可以与字符1匹配 {} //在正则表达式
-
限定符(这个就是用来匹配单个字符在限定符之前出现的次数)
//使用方法——单个字符+限定符 ? //0或1次 + //1或多次 * //0或多次 {n} //n次 {n,} //最少n次 {n,m} //最少n次,最多m次 eg: go{2,}gle,该表达式可以匹配的范围从google到goo...gle
-
字符类
-
元字符中匹配的字符集合(比如:数字就是0-9)都是已存在的,明文规定的,字符类就是你自己定义匹配集合的范围,比如,元音字母[aoeiu]
-
排除字符(匹配不符合指定集合的字符串)
实现方式——[] [^a-zA-Z] //该表达式用于匹配一个不是字母的字符
-
选择字符(匹配有条件选择的字符串)
实现方式——| (^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$ //该表达式用于匹配身份证号的两种情况,要么是15的数字,要么是18位的(前17位是数字,最后一位可以是数字,也可以是X或x)
-
转义字符(将特殊字符变为普通字符)
实现方式——\ [1-9]{1,3}\. [0-9]{1,3}\. [0-9]{1,3}\. [0-9]{1,3} //该表达式用于匹配IP地址,如127.0.0.1
-
分组(将要匹配的字符串分组,分组匹配)
实现方式——() (six|four)th //匹配单词sixth或fourth
-
-
正则表达式在python中的用途
- 用作模式字符串
四、正则表达式的应用—re模块
-
Python提供了re模块,用于实现正则表达式的操作
import re //必须导入这个模块 /* re模块提供的方法 search() match() findall() */
1、匹配
re.match(模式字符串s1,要匹配的字符串s2,[标志位]) //用于从字符串的开始处进行匹配(s2中的匹配元组必须和s1一样),如果在起始位置匹配成功,立即返回match对象,不再扫描后面的字符串,否则返回None re.search(模式字符串s1,要匹配的字符串s2,[标志位]) //在整个字符串中搜索第一个匹配的值(s2中的匹配元组只要包含s1即可) re.findall(模式字符串是,要匹配的字符串s2,[标志位]) //在整个字符串中搜索所有符合正则表达式的字符串、 //加** **以说明重点 /* 标志位说明如下: A——对于元字符只进行ASCII匹配 I——不区分字母大小写的匹配 M——字符串每一行末尾每一行添加^和$ S——匹配所有字符 X——忽略未转义的空格和注释 */ /* eg: import re s1=**r**'mr_\w+' s2='MR_SHOP mr_shop' s3='项目MR_SHOP mr_shop' match1=re.**match**(s1,s2,re.I) match2=re.**match**(s1,s3,re.I) match3=re.**search**(s1,s3,re.I) match4=re.**finall**(s1,s3,re.I) print(match1) //<re.Match object; span=(0, 7), match='MR_SHOP'> print(match2) //None print(match3) //<re.Match object; span=(4, 11), match='MR_SHOP'> print(match4) //['MR_SHOP','mr_shop'] print(match1.start()) //匹配的起始位置——0 print(match1.end()) //匹配的结束位置——7 print(match,span()) //匹配位置的元组——(0,7) print(match.string) //匹配的字符串——MR_SHOP mr_shop print(match.group()) //匹配的数据——MR_SHOP */
2、替换
re.sub(模式字符串s1,替换字符串s2,被替换的原始字符串s3,替换的最大次数,标志位(同上)) //实现字符串的替换 /* import re s1=r'1[34578]\d{9}' s2='号码:84978981 电话为136111111' result=re.sub(s1,'1xxxx',s2) print(result) //'号码:84978981 电话为1xxxx' */
3、分割
re.split(模式字符串s1,要匹配的字符串s2,[最大的拆分次数],[标志位]) //根据正则表达式分隔字符串,并以列表形式返回 /* import re s1 =r'[?|$]' s2='python&java?C' result=re.split(s1,s2) print(result) //['Python','Java','C'] */