美文网首页数据分析啦可爱的爬虫Python小小白
关于爬虫,你需要晓得的正则表达式

关于爬虫,你需要晓得的正则表达式

作者: 5a41eb2ceec6 | 来源:发表于2019-02-02 08:05 被阅读43次

日拱一卒|数据挖掘010

入门爬虫,学习正则表达式并不是必须的,你可以在你真正需要的时候再去学,比如你把数据爬取回来后,需要对数据进行清洗,当你发现使用常规的字符串操作方法根本没法处理时,这时你可以尝试了解一下正则表达式,往往它能起到事半功倍的效果。Python 的 re 模块可用来处理正则表达式(Python之禅 刘志军)。

一、正则表达式简介

正则表达式是处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎.其是对字符串操作的一种逻辑公式,即用事先定义好的一些特定字符、以及这些字符的组合,组成一个“规则字符串”,用来表达对字符串的一种过滤逻辑。

背景知识:字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件

1

正则表达式可以:

  • 提高网络爬虫的效率
  • 提高信息提取的效率
  • 提高网页运行的效率
  • ...

二、正则表达式用途

比如,正在搜索一个文档,里面包含单词can(不区分大小写),但并不像把包含字符串can其他单词(比如American,cancel等)也找出来。

比如,正在编辑一段代码,需要把其中的size都换成isize,但这种替换需要仅仅限于单词size而不涉及其他包含字符串size的其他单词。

比如,创建了一份包含一张表单的Web页面用来收集用户信息,其中包含一个电子邮箱地址。需要检查用户填写的地址是否符合正确的语法格式。

以上场景,正则表达式都有用武之地。

正则表达式具有搜索、过滤和替换功能。在使用的过程中需要注意:

  • 正则表达式主要应用于字符串中
  • 字符串编码问题(UTF-8、GB2312、GBK等)
  • 正则表达式是区分字符串字符大小写的

三、正则表达式语法

该部分内容参考自:正则表达式完全指南(上)正则表达式完全指南(下)

正则表达式由普通文本字符和特殊字符(元字符)两种字符组成。元字符在正则表达式中具有特殊意义,它让正则表达式具有更丰富的表达能力。例如,正则表达式 r"a.d"中 ,字符 ‘a’ 和 ‘d’ 是普通字符,’.’ 是元字符,. 可以指代任意字符,它能匹配 ‘a1d’、’a2d’、’acd’ 。

2
举例说明: 3

如果原文本字符串与正则表达式匹配,那么就会返回一个 Match 对象,当不匹配时,match 方法返回的 None,通过判断m是否为None可进行表单验证。

(一)元字符

1.基本元字符

. 匹配除换行符以外的任意一个字符,例如:”a.c” 可以完全匹配 “abc”,也可以匹配 “abcef” 中的 “abc”

\ 转义字符,使特殊字符具有本来的意义,例如: 1.2 可以匹配 1.2

[...] 匹配方括号中的任意一个字符,例如:a[bcd]e 可以匹配 abe、ace、ade。它还支持范围操作,比如:a到z可表示为 “[a-z]”,0到9可表示为 “[0-9]”,注意,在 “[]” 中的特殊字符不再有特殊意义,就是它字面的意义,例如:[.*]就是匹配 . 或者 *
[^...] 字符集取反,表示只要不是括号中出现的字符都可以匹配,例如:a[^bcd]e 可匹配 aee、afe等

4

group 方法返回原字符串(abcef)中与正则表达式相匹配的那部分子字符串(abc),提前是要匹配成功 match 方法才会返回 Match 对象,进而才有group方法。

2.预设元字符

\w 匹配任意一个单词字符,包括数字和下划线,它等价于 [A-Za-z0-9_],例如 a\wc 可以匹配 abc、acc

\W 匹配任意一个非单词字符,与 \w 操作相反,它等价于 [^A-Za-z0-9_],例如: a\Wc 可匹配 a!c

\s 匹配任意一个空白字符,空格、回车等都是空白字符,例如:a\sc 可以配 a\nc,这里的 \n表示回车

\S 匹配任意一个非空白字符

\d 匹配任意一个数字,它等价于[0-9],例如:a\dc 可匹配 a1c、a2c …

\D 匹配任意一个非数字

5

(二)匹配

1.边界匹配

^ 匹配字符的开头,在字符串的前面,例如:^abc 表示匹配 a开头,后面紧随bc的字符串,它可以匹配 abc
$ 匹配字符的结尾,在字符串的末尾位置,例如: hello$

6

2.重复匹配

* 重复匹配零次或者更多次
? 重复匹配零次或者一次
+ 重复匹配1次或者多次
{n} 重复匹配n次
{n,} 重复匹配至少n次
{n,m} 重复匹配n到m次

7

(三)逻辑分支

匹配一个固定电话号码,不同地区规则不一样,有的地方区号是3位,电话是8位,有的地方区号是4位,电话为7位,区号与号码之间用 - 隔开,如果应对这样的需求呢?这时就需要用到逻辑分支条件字符 |,它把表达式分为左右两部分,先尝试匹配左边部分,如果匹配成功就不再匹配后面部分了,这是逻辑 “或” 的关系。

8

(四)分组

前面介绍的匹配规则都是针对单个字符而言的,如果想要重复匹配多个字符怎么办,答案是,用子表达式(也叫分组)来表示,分组用小括号”()”表示,例如 (abc){2} 表示匹配abc两次, 匹配一个IP地址时,可以使用 (\d{1,3}.){3}\d{1,3},因为IP是由4组数组3个点组成的,所有,前面3组数字和3个点可以作为一个分组重复3次,最后一部分是一个1到3个数字组成的字符串。如:192.168.0.1。

关于分组,group 方法可用于提取匹配的字符串分组,默认它会把整个表达式的匹配结果当做第0个分组,就是不带参数的 group() 或者是 group(0),第一组括号中的分组用group(1)获取,以此类推。

9

通过分组,我们可以从字符串中提取出想要的信息。另外,分组还可以通过指定名字的方式获取,语法如图12。

10

(五)贪婪与懒惰

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。我们称之为贪婪模式,是一种贪得无厌的模式。


11

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。

12 13

Python中re库放在以后说爬虫相关库的时候再介绍啦

参考资料:
1.正则表达式30分钟入门教程
2.Python爬虫知识点梳理
3.Python正则表达式指南
4.正则表达式完全指南(上)
5.正则表达式完全指南(下)
6.可能是最好的正则表达式的教程笔记了吧
7.re — 正则表达式操作
8.python 3.6 正则表达式的应用(附实例代码)
9.棕榈学院-Python正则表达式公开课

相关文章

  • 关于爬虫,你需要知道的re库

    日拱一卒|数据挖掘011 建议阅读前,先看下关于爬虫,你需要晓得的正则表达式 本篇推送的源码在GitHub,链接:...

  • 关于爬虫,你需要知道的re库

    日拱一卒|数据挖掘011 建议阅读前,先看下关于爬虫,你需要晓得的正则表达式 本篇推送的源码在GitHub,链接:...

  • 关于爬虫,你需要晓得的正则表达式

    日拱一卒|数据挖掘010 入门爬虫,学习正则表达式并不是必须的,你可以在你真正需要的时候再去学,比如你把数据爬取回...

  • 关于爬虫,你需要晓得的正则表达式

    日拱一卒|数据挖掘010 入门爬虫,学习正则表达式并不是必须的,你可以在你真正需要的时候再去学,比如你把数据爬取回...

  • 爬虫入门(1)-使用re和requeset

    前言 编写爬虫需要了解正则表达式,网上内容很多,但在爬虫应用中用到最多的正则表达式是 ‘(.*?)’ 在Pytho...

  • 正则表达式

    今天在学习python爬虫爬取妹子图,需要用到正则表达式。感觉一头雾水,于是谷歌了一篇关于讲解正则表达式入门 这篇...

  • python爬虫入门

    入门python爬虫需要的基础知识:html,python,正则表达式。本文将着重围绕与爬虫相关的内容展开介绍。 ...

  • 爬虫入门

    为什么要学习爬虫? Python做爬虫优势 关于Python网络爬虫,我们需要学习的有: 什么是爬虫? 网络爬虫(...

  • Python 爬虫第一步 - 正则表达式

    正则表达式的使用 想要学习 Python 爬虫 , 首先需要了解一下正则表达式的使用,下面我们就来看看如何使用。 ...

  • Python 爬虫第一步 - 正则表达式

    文/千里追风(简书作者) 正则表达式的使用 想要学习Python爬虫 , 首先需要了解一下正则表达式的使用,下面我...

网友评论

    本文标题:关于爬虫,你需要晓得的正则表达式

    本文链接:https://www.haomeiwen.com/subject/gfnlsqtx.html