第7章 字符串基本操作与正则表达式_第1页
第7章 字符串基本操作与正则表达式_第2页
第7章 字符串基本操作与正则表达式_第3页
第7章 字符串基本操作与正则表达式_第4页
第7章 字符串基本操作与正则表达式_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python程序设计——从入门到数据分析PYTHON字符串基本操作与正则表达式7.1字符串的常用方法7.2字符串格式化输出7.3正则表达式7.4实例:网页数据解析及输出第七章学习目标第七章(1)掌握字符串的内置函数和字符串方法。(2)掌握字符串格式化输出方法。(3)理解正则表达式的基础语法,掌握re库的使用。字符串的常用方法第七章7.1序号方法描述1split('',num)通过指定分隔符对字符串进行拆分,并返回分割后的字符串列表。2join(seq)以指定字符串作为分隔符,将seq中所有的元素合并为一个新的字符串。3strip([chars])移除字符串头尾指定的字符(默认为空格或换行符等)或字符序列(即chars表示的字符序列)。4count(str,beg=0,end=len(string))返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数,默认为搜索整个字符串。5startswith(substr,beg=0,end=len(string))检查字符串是不是以指定子字符串substr开头,是则返回True,否则返回False。如果使用beg和end参数指定值,则在指定范围内检查。6endswith(suffix,beg=0,end=len(string))检查字符串是否以suffix结束,在beg或者end指定范围内是否以suffix结束,如果是,返回True,否则返回False。7replace(old,new[,max])将字符串中的old替换成new,如果max指定,则替换不超过max次。表7.1字符串常用方法字符串的常用方法第七章7.1(1)字符串拆分:split()。split()方法通过指定分隔符对字符串进行拆分,并返回分割后的字符串列表,其语法格式为:string.split(str,num)string表示待拆分的字符串或字符串变量;str表示分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素;num表示分割次数。如果存在参数num,则仅分隔成num+1个子字符串。字符串的常用方法第七章7.1【例7.1】字符串的拆分。['I','love','apple']['I','loveBISTU']#运行结果字符串的常用方法第七章7.1(2)字符串的连接:join()。join()方法可以连接字符串序列,将字符串、元组以及列表中的元素以指定的字符(分隔符)进行连接,返回值为一个以分隔符连接各个元素后生成的新字符串,其语法格式为:'sep'.join(seq)sep表示分隔符,可以为空。seq表示要连接的元素序列、字符串、元组、字典;如果连接的序列为字典,则连接字典的键,输出结果是所有键组成的字符串。字符串的常用方法第七章7.1【例7.2】字符串的连接。'Chinese;English;Math'#运行结果字符串的常用方法第七章7.1(3)去除字符串首尾的字符:strip()。在数据分析时,经常会遇到数据有多余的空格、换行等字符,strip()方法可以移除字符串头尾指定的字符或字符序列。返回值为去除首尾字符的字符串。其语法格式为:string.strip(chars)string表示字符串或字符串变量。chars为可选参数,表示要移除的字符,默认为移除空格、换行符“\n”、回车“\r”、制表符“\t”。字符串的常用方法第七章7.1'<课程介绍>''课程介绍'【例7.3】strip()方法的使用。#运行结果字符串的常用方法第七章7.1(4)统计字符次数:count()。count()方法用于统计字符串里字符出现的次数,返回值为字符出现的次数。其语法格式为:string.count(chars,start,end)chars表示要统计出现次数的字符或字符串。start表示字符串开始搜索的位置,可选参数,默认为第一个字符,第一个字符索引值为0。end表示字符串中结束搜索的位置,可选参数,默认为字符串的最后一个位置。字符串的常用方法第七章7.1

3【例7.4】count()方法的使用。#运行结果字符串的常用方法第七章7.1(5)检查字符串的开头和结尾:startswith()和endswith()。startswith()方法检查字符串是否以指定字符串开头,是则返回True,否则返回False。string.startswith(str,beg,end)string表示要检查的字符串或字符串变量;str表示指定的字符串,检查是否以str开始;beg表示开始搜索的位置,可选参数,默认为第一个字符,第一个字符索引值为0。end表示结束搜索的位置,可选参数,默认为字符串的最后一个位置。字符串的常用方法第七章7.1True【例7.5】startswith()方法。#运行结果字符串的常用方法第七章7.1endswith()方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。其语法格式为:string.endswith(str,beg,end)参数string,str,beg,end参数含义与startswith()方法相同。字符串的常用方法第七章7.1False【例7.6】endswith()方法的使用。#运行结果字符串的常用方法第七章7.1(6)替换字符串中的字符:replace()。replace()方法把字符串中的旧字符串替换成新字符串,返回值为替换后的新字符串。其语法格式为:string.replace(old,new,max)string表示原字符串;old表示将被替换的子字符串;new表示新字符串,用于替换old子字符串;max表示可选字符串,替换不超过max次。字符串的常用方法第七章7.1这是旧字符串这是新字符串【例7.7】字符串replace()方法。#运行结果字符串格式化输出第七章7.2在Python3.6之前,常用的字符串格式化方法主要有“%”和str.format()两种。首先,介绍一下“%”格式化操作,字符串对象有一个内建操作符%,可以用于格式化操作,具体的使用方法如例7.8所示。字符串格式化输出第七章7.2【例7.8】“%”格式化操作。示例一:'Hello,John.'#运行结果示例二:'Hello,John.Heis18.'#运行结果字符串格式化输出第七章7.2str.format()是字符串格式化方法中的一种,其基本使用格式为:<模板字符串>.format(<逗号分隔的参数>),模板字符串包含一系列槽,用来控制传入参数的位置和格式,因此模板字符串中的槽除了包括参数序号,还包括格式控制信息。槽的内部样式如下:{<参数序号>:<格式控制标记>}。当参数序号省略时,则按顺序传入参数。

字符串格式化输出第七章7.2格式控制标记用于控制参数显示时的格式。格式控制标记包括:<填充>、<对齐>、<宽度>、<,>、<.精度>和<类型>6个字段,这些字段都是可选的,可以组合使用。表7.2为常用格式控制标记。

:<填充><对齐><宽度>,<.精度><类型>引导符号用于填充的单个字符<左对齐>右对齐^居中对齐槽的设定输出宽度数字的千位分隔符,适用于整数和浮点数浮点数小数部分的精度或字符串的最大输出长度整数类型:b,c,d,o,x,X浮点数类型:e,E,f,%表7.2常用格式控制标记<填充>、<对齐>、<宽度>、<,>、<.精度>和<类型>6个字段

字符串格式化输出第七章7.2中国********有1,300,000,000人口,用占世界7.2%的土地,养活了世界20.000%的人口【例7.9】字符串格式化输出的format()方式。槽位中参数序号从0开始,0、1、2、3代表与format()中字符串的对应关系,如序号0与1300000000对应;序号1与“中国”对应。{1:*<10}中,10表示输出数据的宽度,如果输出的数据宽度小于10,则用“*”号填充;{2:.1%}对应输出的是0.072的百分数形式,保留1位小数。{3:.3%}是输出0.20000的对应百分数,保留3位小数。#运行结果字符串格式化输出第七章7.2在Python3.6之后版本添加的f-string,称之为字面量格式化字符串,亦称为格式化字符串常量(Formattedstringliterals),f-string在形式上是以f或F修饰符引导的字符串(f'xxx'或F'xxx'),以大括号{}标明被替换的字段;f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。【例7.10】字符串格式化输出的f-string方式。#运行结果Lilyis18yearsold字符串格式化输出第七章7.2可以对传入变量值进行格式化,格式化符号与format()方法一致。【例7.11】f-string方式的变量值格式化。#运行结果Lilyis18.23yearsold字符串格式化输出第七章7.2f-string格式化也支持字典键值传入,传入值时以

dictionary['key']的形式传入,其中dictionary表示字典变量名称,key表示字典dictionary中的键。

【例7.12】f-string方式的字典键值传入。#运行结果Lilyis18yearsoldLilyis18.00yearsold字符串格式化输出第七章7.2字符串里常常存在一些如换行“\n”、制表符“\t”等带有反斜杠“\”的特殊含义的字符,这些字符被称为转义字符。Python中常见的转义字符见表7.3。

转义字符描述\(在行尾时)续行符\\反斜杠符号\'单引号\"双引号\a响铃\b退格\e转义\000空\n换行\v纵向制表符\t横向制表符\r回车\f换页\oyy八进制数,yy代表的字符,例如:\o12代表换行\xyy十六进制数,yy代表的字符,例如:\x0a代表换行\other其他的字符以普通格式输出字符串格式化输出第七章7.2【例7.13】转义字符的输出。如果转义字符不需要转义,则可以采取在字符串前端引号外加'r'的方式实现,或者使用双反斜杠(\\)。

【例7.14】转义字符不需要转义的格式化输出。#运行结果人生苦短请用Python#运行结果人生苦短\n请用Python人生苦短\n请用Python正则表达式第七章7.3正则表达式(RegularExpression)能够灵活搜索或匹配字符串模式,是一种特殊的字符序列,即特殊的字符串。设计思想是用描述性的语言来给字符串定义规则,凡是符合规则的字符串,就认为它“匹配”了,否则,就认为该字符串“不匹配”。元字符第七章7.3.1正则表达式中既可以包含普通字符,也可以包含元字符,元字符用来指定匹配模式。在应用正则表达式进行匹配时,正则表达式中的普通字符需要做精确匹配,而元字符指定的匹配模式对应了匹配规则。例如:普通字符'a'只匹配字符串中的'a',元字符'.'则可以匹配任意字符。Re常用的元字符有“.、^、$、*、+、?、\、|、{}、[]、()”等,表7.4列出了Python正则表达式构建中常用的元字符。正则表达式第七章7.3表7.4Python正则表达式的元字符元字符说明举例.代表任意字符a..b可以匹配以'a'开始以'b'结束的四个字符组成的字符串|逻辑或操作符asdf|bkm可以匹配字符串asdf或bkm[]字符集[abc]表示字符'a'、'b'、'c'。[a-z]表示'a'到'z'的任意单个字符-定义一个区间1-5表示1,2,3,4,5*前一个字符0次或多次重复abc*表示ab,abc,abcc,abccc,abccccc等+前一个字符一次或多次重复abc+表示abc,abcc,abccc等?前一个字符0次或1次重复abc?表示ab和abc[^]对字符集合取非[^abc]表示不是a、b、c的其他单个字符正则表达式第七章7.3表7.4Python正则表达式的元字符(续)元字符说明举例{n}扩展前一个字符n次ab{2}c表示abbc{m,n}扩展前一个字符m至n次(含n次)ab{2,4}c表示abbc,abbbc,abbbbc{n,}至少匹配n次

x{n,}:匹配至少n次x^匹配字符串的开头^abc表示abc且在一个字符串的开头$匹配字符串的结尾abc$表示abc在一个字符串的结尾()分组标记,内部用|分组(abc|xyz)表示abc、xyz正则表达式第七章7.3除了以上元字符,Python正则表达式还提供了特殊序列表示特殊的含义,特殊序列由反斜杠(“\”)和一个字符组成。表7.5列出了常见的特殊序列。特殊序列代表的匹配字符\s与所有空白字符匹配,等价于[\t\v\n\f\r]\S与所有非空白字符匹配,等价于[^\t\v\n\f\r]\d等同于[0-9]\D等同于[^0-9]匹配非数字\w等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线\W等同于[^a-z0-9A-Z_],等同于上一条取反表7.5Python正则表达式常见的特殊序列正则表达式的常见用法,例如:描述北京常规的固话号码:'(010-)?[2-9][0-9]{7}'表示可选010前缀,2-9开头。描述IP地址的简单正则表达式:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}。描述Email的简单正则表达式:[0-9a-zA-Z.]+@[0-9a-zA-Z.]+?com。Re模块第七章7.3.2re模块提供了正则表达式匹配操作,将正则表达式的样式编译为一个正则表达式对象,可以用于匹配。正则表达式也是字符串,re库中的compile()函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象,该对象拥有一系列方法用于正则表达式匹配和替换Re模块第七章7.3.2【例7.15】pile()的用法。#运行结果re.PatternRe模块第七章7.3.2生成的正则表达式对象可以用于查找匹配的字符串、字符串的替换及拆分等。(1)查找匹配的字符串。正则表达式对象用于查找匹配字符串的方法主要有:search()、findall()、finditer()、match()以及fullmatch()。search()函数扫描整个字符串进行模式匹配且为贪婪匹配(最大的模式匹配),如果找到第一个匹配的位置,则返回一个MatchObject对象,存储匹配位置、匹配内容等信息。例如:电商平台的商品评价中,要查找对相机质量的评价。Re模块第七章7.3.2【例7.16】查找匹配字符串的search()方法。<re.Matchobject;span=(6,19),match='画质好,但是夜景模式画质差'>#运行结果<re.Matchobject;span=(6,9),match='画质好'>#运行结果下面代码首先生成正则表达式对象pattern,正则表达式对象调用其方法search()查找匹配的字符串。search()方法默认为贪婪匹配,即寻找最大的模式匹配。“.*”表示匹配除换行符外的0个或任意多个字符,采用{,n}限制间隔的字数。Re模块第七章7.3.2【例7.17】查找匹配字符串的findall()方法。search()是寻找从左到右第一个与正则表达式匹配,而不是找到所有匹配,贪婪匹配是查找到第一个最大的匹配项。如果要获取所有匹配,可以采用findall()方法,返回结果是匹配的列表。search()和findall()方法均为贪婪匹配,即匹配最大/长的项。为了避免错误,可以在设计正则表达式时限定字符数量。['画质好','画质差']['画质好,但是夜景模式画质差']#运行结果#运行结果Re模块第七章7.3.2finditer()函数与findall()函数的作用基本是一样的,区别在于findall()函数返回的是列表,finditer()函数返回的是迭代器,迭代器用完之后可以自动释放内存。在处理的数据较大时,finditer()非常有用,可以节省内存空间。【例7.18】查找匹配字符串的finditer()方法#运行结果<re.Matchobject;span=(6,9),match='画质好'><re.Matchobject;span=(16,19),match='画质差'>Re模块第七章7.3.2search()函数和findall()函数匹配任意位置的模式,match()函数的不同之处在于只匹配出现在字符串开头的模式,即如果符合正则表达式的模式如果出现在字符串的开头,match()函数会返回MatchObject对象,如果出现在中间位置或无匹配模式,则返回None。match()函数也是贪婪的。它显然不存在匹配第一个还是多个这样的问题,因为从头开始的贪婪匹配显然只能有一种结果。【例7.19】查找匹配字符串的match()方法。<re.Matchobject;span=(0,13),match='画质好,但是夜景模式画质差'>#运行结果NoneType#运行结果Re模块第七章7.3.2match()只从字符串的开头匹配,fullmatch()用于检测pattern是从头到尾匹配。查看例7.20的结果【例7.20】查找匹配字符串的fullmatch()方法。NoneType#运行结果#运行结果<re.Matchobject;span=(0,20),match='画质好,但是这款夜间模式时不清晰,画质差'>Re模块第七章7.3.2(2)字符串的拆分。字符串的split()方法能够实现对字符串的拆分,一般是基于默认或指定的分隔符进行拆分。利用正则表达式可以更加灵活地对字符串进行拆分,满足正则表达式的匹配项都可以作为分隔符,下面通过例题了解re模块中拆分字符串的split()方法的使用。【例7.21】字符串拆分的split()方法。['小明','男','信管2001&#;计算机']#运行结果['小明','男','信管2001','计算机']#运行结果Re模块第七章7.3.2(3)字符串的替换。re模块中用于字符串替换的函数有sub()和subn(),两个函数用法基本相同,返回值不同。sub()函数返回替换后的结果(仍是字符串),subn()返回元组,元组的元素是替换后的字符串和替换的次数。例7.22】字符串替换的sub()方法。

#运行结果这个西红柿可以做西红柿炒鸡蛋。这个西红柿可以做柿子炒鸡蛋。('这个西红柿可以做西红柿炒鸡蛋。',2)Re模块第七章7.3.2(4)re库使用模式。前面在使用re模块中的函数时,先将正则表达式字符串生成正则表达式对象,然后用正则表达式对象调用各个方法,这种操作适合数据量较大时,因为正则表达式对象可以重复使用。【例7.23】re库的使用一。#运行结果'跑起来吧,青年!我校“校园健康跑”活动启动。'('跑起来吧,青年!我校“校园健康跑”活动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论