Python爬虫--- 1.4 正则表达式:re库

原文连接:www.fkomm.cn/article/201…html

想要学习爬虫,正则表达式是必定绕不过去的一关。正则表达式是咱们在筛选文本数据是常常使用的利器。简单来讲,一个正则表达式表达了符合这一规则的一系列的文本。python

从“通配符”到正则表达式

玩linux的同窗在bash里必定常常用下面这一段代码:linux

$ rm -rf /*.txt·正则表达式

这里其实就是一个很是简单的删除当前目录下全部txt文件的命令, *号其实就一个 ‘通配符’。表示任何形式的数据。 从这里咱们就能够引出正则表达式的概念:bash

正则表达式是用来简洁表达一组字符串的表达式,或者你能够将它理解为高级版的 通配符 表达式函数

  • 举个例子:
import re

test = 'python is the best language , pretty good !'

p = re.findall('p+',test)

print(p)

''' OUT: ['p', 'p'] '''
复制代码

正则表达式的语法:

来一套言简意赅的图:学习

来几个正则表达式的栗子:ui

经常使用的正则表达实例:

注意一下 : $ 表示结束匹配spa

Python的re库的基本使用

re库是Python内置的标准库,因此咱们不用安装,直接import re就能直接使用。3d

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库还有不少更加高级的用法,

我会在之后的实战里慢慢展示。

说到实战,写简单爬虫的基础我们已经都掌握了。


相关文章和视频推荐

圆方圆学院聚集 Python + AI 名师,打造精品的 Python + AI 技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。

公开课地址:ke.qq.com/course/3627…

加入python学习讨论群 78486745 ,获取资料,和广大群友一块儿学习。

圆方圆python技术讨论群
圆方圆python技术讨论群
相关文章
相关标签/搜索