版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【Python语言程序设计】第7章正则表达式1.正则表达式的概念2.正则表达式的使用方法3.常用的正则表达式处理函数重点:1.正则表达式的概念2.正则表达式的使用方法3.常用的正则表达式处理函数难点:1.正则表达式的使用方法2.常用的正则表达式处理函数知识要点知识点Python语言程序设计【正则表达式进行网页解析】案例【正则表达式进行网页解析】1234567importre
f=open('web.txt','r')
web=f.read()
urls=re.findall('https://.*?"',web)
f.close()
forurlinurls:
print(url)123456789101112<divclass="top-nav-websiteapp"><ahref="/w/app?channel=top-nav"class="lnk">下载某某网站客户端</a><divid="top-nav-appintro"class="more-items"><pclass="appintro-title">某某网站</p><pclass="slogan">我们的部落格</p><divclass="download"><aref="/redirect?download=iOS">iPhone</a><span>•</span><ahref="/redirect?download=Ad">Android</a></div></div></div>web.txt第1行,导入re模块,re模块使Python语言拥有全部的正则表达式功能。第2行,调用文件的open方法,打开web.txt。第3行,将web.txt中的文本内容读取出来,赋值给web变量。getUrls.py279<ahref="/w/app?channel=top-nav"class="lnk">下载某某网站客户端</a><aref="/redirect?download=iOS">iPhone</a><ahref="/redirect?download=Ad">Android</a>
web.txt4urls=re.findall('https://.*?"',web)第4行,re模块提供
Perl风格的正则表达式模式。利用findall函数获取字符串web中所有匹配的字符串。匹配格式为:https://.*?"。getUrls.pyhttps://开头表示以https://为前缀文本。点(.)匹配任意除换行符“\n”外的字符。星号(*)表示匹配前一个字符0次或无限次。星号(*)后跟问号(?)表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复。三个符号组合(.*?)表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。案例【正则表达式进行网页解析】【例如】a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。案例【正则表达式进行网页解析】非贪婪匹配案例【正则表达式进行网页解析】279<ahref="/w/app?channel=top-nav"class="lnk">下载某某网站客户端</a><aref="/redirect?download=iOS">iPhone</a><ahref="/redirect?download=Ad">Android</a>
web.txt4urls=re.findall('https://.*?"',web)getUrls.pyhttps://.*?"表示以http://开始,以双引号(“)结束的字符串,而且要求匹配重复最少的。上例中首先匹配到/w/app?channel=top-nav",所以不再匹配/w/app?channel=top-nav"class=",虽然class=后面也有双引号(“),但是因为是非贪婪模式,所以选择第一次匹配成功的那个。即/w/app?channel=top-nav"。Python语言程序设计【案例:正则表达式在数据清洗中应用】案例【正则表达式在数据清洗中应用】案例描述:已知,某网址/中有各类电影市场票房信息,网页样本moviesample.htm保存于已知目录中,分析网页样本文件。综合利用正则表达式和字符串处理算法,截取票房概况表格信息。电影名称总场次/占比网票票房A票房B票房C票房D票房实时(不含预售)预计累积某某历险记9.16万/27.1%1166.11万120.12万660.33万50.24万30.63万2888.85万6827.81万8.61亿某某传奇6.43万/25%1271.97万0725.72万024.28万3114.63万8110.94万4.1亿……………………………………………………案例【正则表达式在数据清洗中应用】案例描述:已知,某网址/中有各类电影市场票房信息,网页样本moviesample.htm保存于已知目录中,分析网页样本文件。综合利用正则表达式和字符串处理算法,截取票房概况表格信息。moviesample.html案例【正则表达式在数据清洗中应用】第2行,导入os模块,os模块包含普遍的操作系统功能。本案例中第17行将调用os._exit()会直接将python程序终止。exit(0):无错误退出案例【正则表达式在数据清洗中应用】第3行,导入sys模块,sys模块提供了一系列有关Python运行环境的变量和函数。本案例中第6行调用sys.path[0],获取当前movie.py所在目录。案例【正则表达式在数据清洗中应用】第4行,导入urllib.request模块,为后续获取页面做准备。urllib.request模块提供了最基本的构造HTTP请求的方法,利用它可以模拟浏览器的一个请求发起过程。案例【正则表达式在数据清洗中应用】第7行,url='file:'+p_path+'/moviesample.htm'得到网页所在完整路径。案例【正则表达式在数据清洗中应用】第8行,使用request()来包装请求,再通过urlopen()获取页面。req=urllib.request.Request(url,headers={'User-Agent':"MagicBrowser"})urllib.request.Request的基本语法如下:urllib.request.Request(url,data=None,headers={},method=None)其中,headers(头部信息)可以携带如下信息:浏览器名和版本号、操作系统名和版本号、默认语言等等。UserAgent存放于Headers中,服务器就是通过查看Headers中的UserAgent来判断是谁在访问。案例【正则表达式在数据清洗中应用】第9行,webpage=urllib.request.urlopen(req),直接调用urllib.request模块中的urlopen()获取页面。案例【正则表达式在数据清洗中应用】第10行,webpage.read()的数据格式为bytes类型,需要decode("utf-8"))解码,转换成str类型。案例【正则表达式在数据清洗中应用】第11行中的s得到开始的位置,第12行中的e得到的是结束的位置。第13行中strw_table=strw[s:s+e]通过字符串截取的方式完成了从茫茫html代码中找到需要进行分析的那部分内容。案例【正则表达式在数据清洗中应用】数据范围都已经准备妥当,接下来要进行第一次数据过滤,第15行利用re.findall()找到符合条件的那部分数据,符合条件的数据将放到列表m中。条件就是第14行定义的规则表达式。规则如下:
<trclass="[a-z]{3,4}"><td><ahref=/film/[0-9]+/boxoffice"title=.+</tr>规则如下:
<trclass="[a-z]{3,4}"><td><ahref=/film/[0-9]+/boxoffice"title=.+</tr>
(1)[a-z]{3,4}表示由a到z字母中任意3到4个组成的字符串。这样class="odd"和class="even"就满足条件。
(2)[0-9]+表示由多个0到9的数字构成的字符串。
(3).+表示匹配任意多个字符。这样,程序将向后继续匹配,直到找到</tr>位置。(4).表示匹配除"\n"之外的任何单个字符。(5)+表示前一个字符匹配一次或者多次。<trclass="odd"><td><ahref="/film/8080/boxoffice"title="某某历险记">某某历险记</a></td><td>9.16万/27.1%</td><td>1166.11万</td><td>0</td><td>660.33万</td><td>0</td><td>30.63万</td><td>2888.85万</td><td>6827.81万</td><td>8.61亿</td></tr>案例【正则表达式在数据清洗中应用】案例【正则表达式在数据清洗中应用】第16-17行,如果匹配不到,则程序正常退出。案例【正则表达式在数据清洗中应用】第19行,列表m中已经有多条类似于html结构示例中的数据,用for语句进行遍历,第20行,执行ss=re.findall(r'(\d+[\.]?\d*[%]?[^\x00-\xff]*)',t),对m列表中的每一项进行过滤。
现对\d+[\.]?\d*[%]?[^\x00-\xff]*进行分析:(1)\d+表示一到多个数字
(2)[\.|/]?表示一个小数点或者一个除号,?表示前面这部分是可选的。注意这里的\.表示这个点为字符点(.),而不是正则表达式中的匹配模式(.)
(3)\d*表示0到1个数字
(4)[%]?表示0到多个%。
(5)[^\x00-\xff]*:^表示非,匹配双字节字符[\x00-\xff],比如大写英文字母。加上^表示相反的意思,就是匹配非双字节的字符。小写字母和汉字都会被匹配出来。*表示前面这部分0到多个。
综上所述,满足条件的可以是整数、小数、带百分号的数、后方有字符(含中文字符)的数。
['8080','9.16万','27.1%','1166.11万','120.12万','660.33万','50.24万','30.63万','2888.85万','6827.81万','8.61亿']['8080','6.43万','25%','1271.97万','0','725.72万','0','24.28万','3114.63万','8110.94万','4.1亿']…..由于篇幅原因,只展示部分数据案例【正则表达式在数据清洗中应用】案例【正则表达式在数据清洗中应用】第20、21行,获取列表ss中票房数据,其中ss[-3]为票房数据,float(ss[-3].replace(‘万’,‘’))表达式先去除中文字符(万),然后转换成浮点型进行求和,算出票房票房总额。Python语言程序设计【修饰符与模式】上节回顾【正则表达式在数据清洗中应用】问题:1.什么是非贪婪模式?2..代表什么?3.*代表什么?4.?代表什么?
案例【修饰符】修饰符描述re.I使匹配对大小写不敏感re.L做本地化识别(locale-aware)匹配re.M多行匹配,影响^和$re.S使.匹配包括换行在内的所有字符re.U根据Unicode字符集解析字符。这个标志影响\w,\W,\b,\B.re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。案例【模式】模式描述^匹配字符串的开头$匹配字符串的末尾。.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。[...]用来表示一组字符,单独列出:[amk]匹配'a','m'或'k'[^...]不在[]中的字符:[^abc]匹配除了a,b,c之外的字符。re*匹配0个或多个的表达式。re+匹配1个或多个的表达式。re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式re{n}re{n,}精确匹配n个前面表达式。re{n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式a|b匹配a或b模式描述(re)G匹配括号内的表达式,也表示一个组(?imx)正则表达式包含三种可选标志:i,m,或x。只影响括号中的区域。(?-imx)正则表达式关闭i,m,或x可选标志。只影响括号中的区域。(?:re)类似(...),但是不表示一个组(?imx:re)在括号中使用i,m,或x可选标志(?-imx:re)在括号中不使用i,m,或x可选标志(?#...)注释.(?=re)前向肯定界定符。如果所含正则表达式,以...表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。(?!re)前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功(?>re)匹配的独立模式,省去回溯。模式描述\w匹配字母数字\W匹配非字母数字\s匹配任意空白字符,等价于[\t\n\r\f].\S匹配任意非空字符\d匹配任意数字,等价于[0-9].\D匹配任意非数字\A匹配字符串开始\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。\z匹配字符串结束\G匹配最后匹配完成的位置。\b匹配一个单词边界,也就是指单词和空格间的位置。例如,'er\b'可以匹配"never"中的'er',但不能匹配"verb"中的'er'。\B匹配非单词边界。'er\B'能匹配"verb"中的'er',但不能匹配"never"中的'er'。\n,\t,等.匹配一个换行符。匹配一个制表符。等\1...\9匹配第n个分组的内容。\10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。实例描述python匹配"python"实例描述[Pp]ython匹配"Python"或"python"rub[ye]匹配"ruby"或"rube"[aeiou]匹配中括号内的任意一个字母[0-9]匹配任何数字。类似于[0123456789][a-z]匹配任何小写字母[A-Z]匹配任何大写字母[a-zA-Z0-9]匹配任何字母及数字[^aeiou]除了aeiou字母以外的所有字符[^0-9]匹配除了数字外的字符实例描述.匹配除"\n"之外的任何单个字符。要匹配包括'\n'在内的任何字符,请使用象'[.\n]'的模式。\d匹配一个数字字符。等价于[0-9]。\D匹配一个非数字字符。等价于[^0-9]。\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。\S匹配任何非空白字符。等价于[^\f\n\r\t\v]。\w匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。\W匹配任何非单词字符。等价于'[^A-Za-z0-9_]'。知识点【修饰符】1234567importrepattern1=pile(r"""\d+#整数部分\.#小数点\d*#小数部分""",re.X)text="abc12.3efg"print(pattern1.findall(text))示例【compile()】compile(pattern[,flags])#根据包含正则表达式的字符串创建模式对象。【例】compile()123importreprint(re.match('www','').span())#在起始位置匹配print(re.match('com',''))#不在起始位置匹配【例】match()简单示例示例【match()】re.match尝试从字符串的起始位置匹配一个模式,如果不是在起始位置匹配成功的话,match()就返回None。【例】match()中group使用示例【match()】re.match尝试从字符串的起始位置匹配一个模式,如果不是在起始位置匹配成功的话,match()就返回None。1234567importreline="我love北京天安门,我love中国!"mObj=re.match(r'love',line,re.M|re.I)ifmObj:print("mObj.groups():",mObj.group())else:print("找不到!!")【例】match()中group的各种写法示例【match()】re.match尝试从字符串的起始位置匹配一个模式,如果不是在起始位置匹配成功的话,match()就返回none。1234567891011importreline="我love北京天安门,我love中国!"mObj=re.match(r'(.*?)love(.*)',line,re.M|re.I)ifmObj:print("mObj.groups():",mObj.groups())print("mObj.group():",mObj.group())print("mObj.group(0):",mObj.group(0))print("mObj.group(1):",mObj.group(1))print("mObj.group(2):",mObj.group(2))else:print("没有找到!!")【例】search()的写法示例【search()】re.search扫描整个字符串并返回第一个成功的匹配。匹配成功re.search函数返回一个匹配的对象,否则返回None。123importreprint(re.search('www','').span())#在起始位置匹配print(re.search('com','').span())#不在起始位置匹配【例】search()的写法示例【search()】re.search扫描整个字符串并返回第一个成功的匹配。匹配成功re.search函数返回一个匹配的对象,否则返回None。123456789importreline="我love北京天安门,我love中国!"sObj=re.search(r'(.*?)love(.*)',line,re.M|re.I)ifsObj:print("sObj.gro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 如何预防小儿夏季腹泻
- 幼儿园九大活动区域详细说明
- 2025-2026学年汉字幼儿教案
- 2025-2026学年好管家创新美食教学设计
- 2025-2026学年句子改写教学设计
- 2025-2026学年教学设计意图语言领域
- 2025-2026学年教育教学设计导入
- 小学生语文素养提升小学主题班会课件
- 老人走失寻找计划社区志愿者团队预案
- 公共营养师三级技能专项测试试卷及答案2026年
- 铸件外观标准
- 泄水阀井隐蔽检查验收记录
- MySQL数据库应用实验训练参考答案
- 人教版六年级数学上册各单元知识点专项训练练习题及易错题专项训练题含答案解析
- 口腔局部麻醉课件
- 《功能食品加工技术》课程标准
- 软件定义网络技术与实践智慧树知到期末考试答案章节答案2024年深圳信息职业技术学院
- 报表模板-土地增值税清算申报表(自动计算申报表)可填写数据
- 中石油职称英语模拟题答案解析
- 0兆瓦风力发电机组测量传感器与模块
- 国家临床重点专科评标准(耳鼻喉科)
评论
0/150
提交评论