您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 统计图表 > Python(4)字符串与正则表达式
第4章字符串与正则表达式14.1字符串2字符串•字符串是由字符(字母、数字、汉字、其他符号)组成的一个序列。•字符串必须被括在如下的一对符号里:•一对单引号•一对双引号•一对三单引号•一对三双引号3例4字符编码•ASCII•1个字节•128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成•UTF-8•1~6个字节•对世界上所有国家需要用到的字符进行了编码•GB2312•1个字节表示英文,2个字节表示中文•中国制定的中文编码•GBK•对GB2312的扩充•CP936•微软在GBK基础上完成的编码56文件编码•采用不同的编码意味着把同一字符存入文件时,写入的内容可能不同•在Python3中,程序源文件默认为UTF-8编码,全面支持中文。•无论数字、字母、汉字,都按一个字符对待,也可以使用中文作为变量名。78字符串驻留机制stringinterning•Python字符串驻留机制•将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。•保护.pyc文件不会被错误代码搞的过大,例如有人写了‘abc’*10**10这种代码。9•数值-5~256也遵循驻留机制•关于驻留机制参见:判断一个变量是否为字符串•判断一个变量s是否为字符串•使用内置函数isinstance(s,str)10字符串•字符串属于不可变序列类型•支持序列通用方法,包括切片操作•支持特有的字符串操作方法。11例:把一个字符串分m行输出,m由用户指定12字符串常量importstringstring.digits#数字字符'0123456789'string.punctuation#标点符号'!#$%&\'()*+,-./:;=?@[\\]^_`{|}~'string.ascii_letters#英文字母'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'string.printable#可打印字符'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&\'()*+,-./:;=?@[\\]^_`{|}~\t\n\r\x0b\x0c'string.ascii_lowercase#小写字母'abcdefghijklmnopqrstuvwxyz'string.ascii_uppercase#大写字母'ABCDEFGHIJKLMNOPQRSTUVWXYZ'13例:删除字符串中的非字母和非数字的符号14字符串转换函数(仅返回结果,均不修改原字符串)•lower()•得到小写格式字符串•upper()•得到大写格式字符串•capitalize()•得到首字母大写格式•title()•得到每个单词首字母大写格式•swapcase()•得到大小写互换格式15互逆的两个函数ord(.)与chr(.)•函数ord(.):字符ASCII码16函数chr(.):ASCII码字符#ifxinstring.ascii_lowercase:#ifxinstring.ascii_uppercase:17自己实现大小写字母转换字符串联接函数——join(.)•字符串联接join()例:li=[apple,peach,banana,pear]sep=,s=sep.join(li)sapple,peach,banana,pear•不推荐使用+连接字符串,优先使用join()方法•效率原因。每做一次+,需要新建一个字符串,而join()一次性计算出总串长度。18join(.)举例19例•输入一个字符串,输出以空格间隔的字符序列20获取字符串表达式值•内置函数eval(.)eval(3+4)7a=3b=5eval('a+b')8importmatheval('help(math.sqrt)')Helponbuilt-infunctionsqrtinmodulemath:sqrt(...)sqrt(x)Returnthesquarerootofx.eval('math.sqrt(3)')1.7320508075688772eval('aa')Traceback(mostrecentcalllast):Filepyshell#3,line1,inmoduleeval('aa')Filestring,line1,inmoduleNameError:name'aa'isnotdefined21获取字符串表达式值a=input(Inputavalue:)Inputavalue:__import__('os').startfile(r'C:\Windows\notepad.exe')eval(a)#运行notepad.exe程序,打开一个记事本窗口eval(__import__('os').system('mdtesttest'))22将数字转换成字符串str(.)23例:列出1000以内所有的回文数24字符串对齐的方法•center(.)•返回指定宽度的新字符串,原字符串居中,并使用指定字符(默认空格)填充•ljust(.)•返回指定宽度的新字符串,原字符串左对齐,并使用指定字符(默认空格)填充•rjust(.)•返回指定宽度的新字符串,原字符串右对齐,并使用指定字符(默认空格)填充31打印三角形图案(1)32打印三角形图案(2)33打印三角形图案(3)34打印三角形图案(4)35打印三角形图案(5)36字符串格式化37字符串格式化•常用格式字符——与待格式化的表达式类型匹配格式字符说明格式字符说明%s字符串(采用str()的显示)%x十六进制整数%r字符串(采用repr()的显示)%e指数(基底写为e)%c单个字符%E指数(基底写为E)%b二进制整数%f、%F浮点数%d十进制整数%g指数(e)或浮点数(根据显示长度)%i十进制整数%G指数(E)或浮点数(根据显示长度)%o八进制整数%%字符”%”38字符串格式化x=1235so=%o%xso2323sh=%x%xsh4d3se=%e%xse1.235000e+03%s%6565%s%6533365333%d%555Traceback(mostrecentcalllast):Filepyshell#19,line1,inmodule%d%555TypeError:%dformat:anumberisrequired,notstr39%常用格式举例格式说明10.2f格式化浮点数,总宽度为10,四舍五入到小数点后第2位10.2e以科学计数法表示浮点数,总宽度为10,系数保留到小数点后2位5d将整数格式化为总宽度为5的十进制形式5o将整数格式化为总宽度为5的八进制形式5x将整数格式化为总宽度为5的十六进制形式5b将整数格式化为总宽度为5的二进制形式50s将字符串格式化为总宽度为50的字符串,不足则补上空格50.2s截取字符串的前2位,将其格式化为总宽度为50的字符串,不足补空格-10.2f向左对齐格式化对象,若无负号(即默认)则是右对齐+10.2f格式化浮点数,如果是正数,则自动加上正号+(默认不加正号)40字符串格式化—format()print(Thenumber{0:,}inhexis:{0:#x},thenumber{1}inoctis{1:#o}.format(5555,55))print(Thenumber{1:,}inhexis:{1:#x},thenumber{0}inoctis{0:#o}.format(5555,55))print(mynameis{name},myageis{age},andmyQQis{qq}.format(name=DongFuguo,age=37,qq=306467355))41字符串格式化—format()position=(5,8,13)print(X:{0[0]};Y:{0[1]};Z:{0[2]}.format(position))weather=[(Monday,rain),(Tuesday,sunny),(Wednesday,sunny),(Thursday,rain),(Friday,Cloudy)]formatter=Weatherof'{0[0]}'is'{0[1]}'.format#方法对象foriteminmap(formatter,weather):print(item)foriteminweather:print(formatter(item))42%与.format()方法的差异43查找方法•find()、rfind()find()和rfind方法分别用来查找一个字符串在另一个字符串指定范围(默认是整个字符串)中首次和最后一次出现的位置,如果不存在则返回-1;•index()、rindex()index()和rindex()方法用来返回一个字符串在另一个字符串指定范围中首次和最后一次出现的位置,如果不存在则抛出异常;•count()count()方法用来返回一个字符串在另一个字符串中出现的次数。44字符串常用方法s=apple,peach,banana,peach,pears.find(peach)6s.find(peach,7)19s.find(peach,7,20)-1s.rfind('p')25s.index('p')1s.index('pe')6s.index('pear')25s.index('ppp')Traceback(mostrecentcalllast):Filepyshell#11,line1,inmodules.index('ppp')ValueError:substringnotfounds.count('p')5s.count('pp')1s.count('ppp')045字符串分割•split()、rsplit()split()和rsplit()方法分别用来以指定字符为分隔符,将字符串左端和右端开始将其分割成多个字符串,并返回包含分割结果的列表;split()与join()作用相反。split()与rsplit()的区别,在第2个参数指定的分隔符个数n小于实际分隔符数目时,才能看出来。•partition()、rpartition()partition()和rpartition()用来以指定字符串为分隔符将原字符串分割为3部分元组,即分隔符前的字符串、分隔符字符串、分隔符后的字符串,如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串。46字符串分割s=apple,peach,banana,pearli=s.split(,)li[apple,peach,banana,pear]s.partition(',')('apple',',','peach,banana,pear')s.rpartition(',')('apple,peach,banana',',','pear')s.rpartition('banana')('apple,peach,','banana',',pear')s=2014-10-31t=s.split(-)print(t)['2014','10','31']print(map(int,t))[2014,10,31]47字符串分割•对于split()和rsplit()方法,如果不指定分隔符,则字符串中的任何空白符号(包括空格、换行符、制表符等等)都
本文标题:Python(4)字符串与正则表达式
链接地址:https://www.777doc.com/doc-3587272 .html