小编写这篇文章的主要目的,主要是给大家做出一个解答,主要是用来解答Python正则表达式的内容,包括re.compile()和re.findall(),两种常见类型代码的解释,关于这两方面的内容,下面给大家详细的做个介绍。
前言
在使用爬虫提取网页中的部分信息时,采用到了re.compile()与re.findall()两种方法,目的:把网页中的“某某城市土地规划表”截取并打印出来.
网页中的代码:
<span class='tab-details'>某某城市土地规划表</span>
提取的方法:
def parse_response(html): pattern=re.compile('class=\'tab-details\'>(.*?)</span>',re.S) items=re.findall(pattern,html) print(items) return items
结果:
['某某城市土地规划表']
这里主要讲解pattern,re.compile()与re.findall()的定义及用法:
1.pattern:pattern属性规定用于验证输入字段的正则表达式。
2.re.compile():compile()方法用于在脚本执行过程中编译正则表达式,也可用于改变和重新编译正则表达式。
举例:在字符串中全局搜索"man",并用"person"替换。然后通过compile()方法,改变正则表达式,用"person"替换"man"或"woman",:
<script type="text/javascript"> var str="Every man in the world!Every woman on earth!"; patt=/man/g; str2=str.replace(patt,"person"); //用person取代man document.write(str2+"<br/>"); patt=/(wo)?man/g; patt.compile(patt); str2=str.replace(patt,"person"); //用person取代man或者woman document.write(str2); </script>
输出:(可见第一行中的man都被person取代,出现了woperson,第二行的的man和woman也被person取代,只有person,没有其他奇奇怪怪的字符串)
Every person in the world!Every woperson on earth!
Every person in the world!Every person on earth!
3.re.findall():额,这个最难搞,主要是为了讲解(.*?)
re.findall()函数是返回某种形式(比如String)中所有与pattern匹配的全部字符串,返回形式为数组。
下面是findall()函数的两种表示形式:(上面的代码采取的便是第二种形式):
import re kk=re.compile(r'\d+') kk.findall('one1two2three3four4') #[1,2,3,4] #注意此处findall()的用法,可传两个参数; kk=re.compile(r'\d+') re.findall(kk,"one123") #[1,2,3] 下面的是常用的正则表达式: import re str='aabbabaabbaa' #一个"."就是匹配除\n(换行符)以外的任意一个字符 print(re.findall(r'a.b',str))#['aab','aab'] #*前面的字符出现0次或以上 print(re.findall(r'a*b',str))#['aab','b','ab','aab','b'] #贪婪,匹配从.*前面为开始到后面为结束的所有内容 print(re.findall(r'a.*b',str))#['aabbabaabb'] #非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取 print(re.findall(r'a.*?b',str))#['aab','ab','aab'] #非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容 print(re.findall(r'a(.*?)b',str))#['a','','a'] str='''aabbab aabbaa bb'''#后面多加了2个b #没有把最后一个换行的aab算进来 print(re.findall(r'a.*?b',str))#['aab','ab','aab'] #re.S不会对\n进行中断 print(re.findall(r'a.*?b',str,re.S))#['aab','ab','aab','aa\n b'] 注意'.*?'是对它的前后部分作为开始结束部分进行截取,而'(.*?)'也是把其前后作为开始结束,但是只截取括号部分,不包含开始结束部分!!!(同时在对前后部分的选择时要注意特征明确点,就是与众不同的的嘛,防止截取出的是其他部分啊) re.findall中参数re.S的意义: 1.字符串变为(后面多加了2个b) str='''aabbab aabbaa bb'''
2.参数无re.S,没有把最后一个换行的aab算进来
print(re.findall(r'a.*?b',str)) #['aab','ab','aab']
3.参数有re.S,不会对\n进行中断
print(re.findall(r'a.*?b',str,re.S)) #['aab','ab','aab','aa\n b']
在我们一开始的代码中就有re.s,因为在爬取网页的内容时是按照一个一个块的来爬取,可以理解为并列部分,会存在/n分行符。
def parse_response(html): pattern=re.compile('class=\'tab-details\'>(.*?)</span>',re.S) items=re.findall(pattern,html) print(items) return items
到此为止,这篇文章就给大家介绍到这里了,希望可以为大家带来更多帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/128251.html
小编写这篇文章的主要目的,主要是给大家做一个解答,解答关于Python正则表达内容的一些相关介绍,正则表达式当中,主要是涉及到re模块方面的一些介绍,还有就是关于findall()函数的一些例子,那么,具体内容是什么呢?下面就给大家详细解答下。 一、re.findall函数介绍 它在re.py中有定义: deffindall(pattern,string,flags=0): &quo...
摘要:今天来给大家分享一份关于比较详细的正则表达式宝典,学会之后你将对正则表达式达到精通的状态。正则表达式是用在方法当中,大多数的字符串检索都可以通过来完成。导入模块在使用正则表达式之前,需要导入模块。 ...
摘要:匹配个或个由前面的正则表达式定义的片段,非贪婪方式精确匹配个前面表达式。所以接着上面的例子,我们可以改写一下正则表达式。因此,我们可以在使用来简化正则表达式的书写。 作者:毕来生微信:878799579 正则表达式本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。 当然对于爬虫来说,有了...
摘要:假设现在想把字符串你好,,世界中的中文提取出来,可以这么做你好,,世界注意到,我们在正则表达式前面加上了两个前缀,其中表示使用原始字符串,表示是字符串。本文标题为正则表达式模块简明笔记本文链接为参考资料正则表达式 简介 正则表达式(regular expression)是可以匹配文本片段的模式。最简单的正则表达式就是普通字符串,可以匹配其自身。比如,正则表达式 hello 可以匹配字符...
摘要:今天就专门看看正则表达式。下面是一个正则表达式最简单的使用例子。这个例子使用了正则表达式模块的函数,它会返回所有符合模式的列表。查询标志让正则表达式具有不同的行为。,按给定正则表达式分割字符串。,正则表达式中捕获组的数量。 最近研究Python爬虫,很多地方用到了正则表达式,但是没好好研究,每次都得现查文档。今天就专门看看Python正则表达式。本文参考了官方文档 re模块。 模式 首...
阅读 657·2023-01-14 11:38
阅读 484·2023-01-14 11:04
阅读 390·2023-01-14 10:57
阅读 452·2023-01-14 10:48
阅读 500·2023-01-14 10:40
阅读 1300·2023-01-14 10:34
阅读 605·2023-01-14 10:24
阅读 475·2023-01-14 10:18