从零开始写Python爬虫 --- 1.4 正则表达式:re库
2017-10-02 15:13
393 查看
从零开始写Python爬虫 --- 1.4 正则表达式:re库
Ehco
5 个月前
想要学习爬虫,正则表达式是一定绕不过去的一关。正则表达式是我们在筛选文本数据是经常使用的利器。简单来说,一个正则表达式表达了符合这一规则的一系列的文本。
从’通配符‘到正则表达式
玩linux的同学在bash里一定经常用下面这一段代码:rm -rf /*.txt
这里其实就是一个非常简单的删除当前目录下所有txt文件的命令,
*号其实就一个 ‘通配符’。表示任何形式的数据。
从这里我们就可以引出正则表达式的概念:
正则表达式是用来简洁表达一组字符串的表达式,或者你可以将它理解为高级版的 通配符 表达式
举个例子:
import re test = 'python is the best language , pretty good !' p = re.findall('p+',test) print(p) ''' OUT: ['p', 'p'] '''
正则表达式的语法:
来一套言简意赅的图:
来几个正则表达式的栗子:
常用的正则表达实例:
注意一下 :$ 表示结束匹配
Python的re库的基本使用
re库是Python内置的标准库,所以我们不用安装,直接import re就能直接使用。
re库有着非常强大的功能!学好re库对我们爬虫的编写有极大的帮助!
re库 采用了 raw string 类型来表示正则表达式,
例如:
re1 = r'[1-9]\d{5}'
这里的正则表示1一个1~9的数字和5个0~9的数字
如:1000 就符合re标准
使用raw string 的好处是 我们不用手动去再次写转义字符了。
如果不用raw string 类型, 上面的正则表达式我们就得这么写:
re1 = '[1-9]\\d{5}'
re库的主要功能函数:
我们着重讲一下 re.search这个函数:
''' re.search(pattern, string, flags=0) 在一个字符串中搜索匹配正则表达式的第一个位置 返回match对象 ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙ string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 ''' str1 = 'hello , world ,life is short ,use Python .WHAT? ' a = re.search(r'\w+',str1) print(a.group()) # hello
可以看到 我们成功找到了第一个 字符串 ”hello“
常用的第三个参数 flags:
re.IGNORECASE:忽略大小写,同 re.I。
re.MULTILINE:多行模式,改变
和$的行为,同
re.M。
re.DOTALL:点任意匹配模式,让’.’可以匹配包括’\n’在内的任字符,同 re.S。
我们来使用一下控制标记试试:
str1 = 'hello , world ,life is short ,use b = re.search(r'w.+D',str1,re.I) print(b.group()) # world
可以看到r'w.+D' 成功匹配到了world
我们再来说另一个常用函数re.findall()
''' re.findall(pattern, string, flags=0) 搜索字符串,以列表类型返回全部能匹配的子串 ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙ string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 ''' c = re.findall(r'\w+',str1) print (c) #['hello', 'world', 'life', 'is', 'short', 'use', 'Python', 'WHAT']
可以看到,我们找整个字符串中的所有单词,并且以列表类型反回了
好了,剩下的函数用法基本和上面相似,都很简单的。用的时候稍微看一下参数就可以。我就不一一介绍了。
re库的另一种用法
在前面的例子中,我们都是在调用方法是传入一个原生字符串来表示re表达式,但是在多次搜索符合同一规则的数据时,这样做就会使得效率大大降低。相对应的我们有替代的做法。str2 = 'hssso' re1 = re.compile(r'h.{3}o') print(re1.findall(str1)) print(re1.findall(str2)) # ['hello'] # ['hssso']
这样,先把正则进行编译,在进行查找,就能大量节省时间,增加效率
关于Match 对象:
match对象是一次匹配的结果,他包含了很多的信息:''' match 对象的属性 .string : 待匹配的文本 .re : 匹配时使用的patter对象(正则表达式) .pos : 正则表达式搜索文本的开始位置 .endpos : 正则表达式搜索文本的结束位置 ''' d = re.search(r'e.+d',str1) print(d.group()) # ello , world print (d.string) # hello , world ,life is short ,use Python .WHAT? print (d.re) # re.compile('e.+d') print (d.pos) # 0 print (d.endpos) # 48
好了,关于re库,我们暂时就先介绍到这里,
只是介绍了一些浅显的用法,re库还有很多更加高级的用法,
我会在以后的实战里慢慢展现。
说道实战,写简单爬虫的基础咱们已经都掌握了。
下一篇就是实战教程了!
每天的学习记录都会 同步更新到:
微信公众号: findyourownway
知乎专栏:Ehco - 知乎
blog : www.ehcoblog.ml
相关文章推荐
- python爬虫由浅入深8---正则表达式及Re库的基础与使用
- python——爬虫学习——正则表达式与Re库-(4)
- python爬虫中requests库和正则表达式之淘宝爬虫实战
- python爬虫之正则表达式
- python爬虫入门(2)re模块-正则表达式
- 06Python爬虫---正则表达式02之元字符
- python3爬虫之入门和正则表达式
- 芝麻HTTP: Python爬虫入门之正则表达式
- 爬虫---正则表达式:re库
- python 爬虫003-正则表达式简单介绍
- Python爬虫正则表达式和re模块系列之七
- python爬虫(一) 正则表达式
- Python爬虫——4-1.数据筛选之正则表达式
- python正则表达式简单爬虫入门+案例(爬取猫眼电影TOP榜)
- 零基础写python爬虫之神器正则表达式
- Python3.7 爬虫(一)使用 Urllib2 与正则表达式抓取
- python爬虫之正则表达式基础
- [python爬虫] 正则表达式使用技巧及爬取个人博客实例
- python3爬虫之入门和正则表达式,获取IP地址, 隐马尔可夫模型及其在分词中的简单应用
- python之正则表达式以及网络爬虫