前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫基础之正则表达式

python爬虫基础之正则表达式

作者头像
用户1467662
发布2018-03-30 10:37:18
8610
发布2018-03-30 10:37:18
举报
文章被收录于专栏:农夫安全农夫安全

Python基础前期后后看了五六遍,除了能读懂一些简单的代码,一直也没有进阶。

这次借助一个爬虫教学视频。把学习中的一些重点写下来,一个是自己巩固,一个是也帮助跟自己一样有疑惑的朋友有个更深的理解。

这篇主要讲的是正则

正则字符:

1)^ $ * ? + {3} {3,} {3,6}

2) [] [^] [a-z] .

3) \s \S \w \W

4) [\u4E00-\u9FA5] () \d

这里都以python例子来验证说明

^表示以某个字符开头,比如 ^a,即表示以a开头

.表示任意字符(除\n换行符以为),比如 ^a. 表示以a开头,后面可以带上任意字符

* 表示匹配前一个字符0次或无限次,比如 ^a.* 表示以a开头,后面带一个或者多个任意字符

上面这个例子,字符串是以a开头,后面接任意字符,所以是匹配 ^a.* 这个规则的,所以程序打印出yes。很好理解

$ 以某个字符结尾,比如 5$, 则表示匹配以5结尾的字符串

看上图一目了然,不再做多介绍

有个注意点

如果我们的正则是这样写的 ^a.5$ 则表示的只是共3个字符,以a开头,第二个任意字符,第三个为5即结尾。所以如果没有*的话,上图例子中的匹配都是不成功的。

正则表达式的贪婪模式

比如一个字符串"abaaaaaaabbbbbgseraggts",我想用正则匹配提取baaaaaaab,按我们上面所学,则表达式应该是这么写 .*(b.*.b).*

解释一下表达式

以字符开头+(b+任意字符+b)+任意字符,把我们想截取的,加上括号,python中用group获取。

运行程序我们发现,打印出来的是bb,而并非我们要的baaaaaaab。

这就是因为贪婪模式,可以这么理解,.*这里,正则会尽量多的去匹配字符串"abaaaaaaabbbbbgseraggts",所以他是是找到倒数第二个b才去匹配(b.*b),结果匹配出来的是bb,可以用从右往左反向匹配匹配来理解。

基于上面的贪婪模式,我们可以在正则表达式中改成这样

.*?(b.*.b).* ,即变成非贪婪模式,从左边开始匹配,找到第一个b开始。如果图运行结果

如果直接.*?(b.*.b).*,则出来的结果是baaaaaaabbbbb,因为贪婪模式的原因,他会去匹配尽量多的b

所以正确的表达式是 .*?(b.*.?b).*

+ 与 * 大同小异,不同的一点是,+限定前面一个字符出现的次数至少要一次,而*则没有这个限定,可以是0次,也可以是1次或者多次。

比如正则为b.+b , bab或者baacb都是匹配这个正则的,而bb则不匹配这个正则

但是bb,bab,baacb都是匹配 b.*b 这个正则的。

如下图实例

{3} {3,} {3,6} 这三个就是限定字符出现的次数

{3}表示出现三次

{3,}表示3次或3次以上

{3,6}表示3-6次包括3和6次。

| 可以理解为或

比如 abc |abc123 这个正则,则只要匹配这两个字符串中的一个,则表示匹配成功

[] ,比如[1243],表示中括号中只要有一个匹配则表示匹配

还有一种表示法[0-9]表示0-9之间的任意数字有一个匹配的话就是可以,还有[a-Za-z]都是一样的道理。而[^]在表示取反,例如[^5]则表示除了5以外的所有字符

中括号做常用的是表示电话号码

1[48357][0-9]{9} 1开头,第二位为48357其中一个,后面只能是9为0-9的任意数字

\s 表示空格

\S 表示非空格

\w 可以用与中括号的[A-Za-z0-9_]这之间的任意字符一个意思

\W 是\w的取反

[\u4E00-\u9FA5] 表示汉字

这里有个注意点,因为我用的是python2.7,所以中文要主要编码问题

\d 代表的是数字,这个很简单,不再多讲

正则是一个很重要的知识点,最主要是要懂得搭配使用。

有了正则,在爬虫中就可以精准的爬到我们想要的东西。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络安全社区悦信安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档