首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python爬虫系列:正则表达式(2)

Python爬虫系列:正则表达式(2)

作者头像
小Bob来啦
发布2021-07-29 11:15:41
发布2021-07-29 11:15:41
5760
举报
之前关于Python的文章一直处于断更状态,想着也是鸽了很久,这不,小编准备给补上了~

关于上次Python爬虫的文章:Python爬虫系列:正则表达式(1)

目录:

  1. raw string原生字符串类型
  2. 关于正则库常用的函数
  3. 常用函数简介

1.raw string

在正则库中,常用原生字符串表示字符串。

那么什么是原生字符串呢,字面意思是原生的,在Python中为不含转义符的字符串

常见形式为:r'text',即在字符串之前添加一个大写或小写的r。例如:r'[1-9]\d{5}'

那么字符串和原生字符串有哪些区别呢?

String类型因为斜杠被表示为转义,因此在显得更加繁琐。

比如:

代码语言:javascript
复制
'[1-9]\\d{5}'
'\\d{3}=\\{8}|\\d{4}-\\d{7}'

关于原生字符串和字符串之间的区别,小编在这里给大家举例:

当我们用字符串表示\n时就需要用两个斜杠,表示起来不是很方便。即:当正则表达式包含<转义符>时,使用raw string。

2.正则库常用函数

当我们在爬取特定内容时,不可避免的需要用到正则库,其中正则库中的函数可以帮助我们做很多事,下面将列举最常用到的正则库的主要功能函数

代码语言:javascript
复制
re.search() 在一个字符串中搜索匹配正则表达式的第一个位置
re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素都是match对象
re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

To:如上列举了6个最常用的正则主要功能函数,别看函数很简单哦,用起来还是很需要熟练度的哦。

3.常用函数简介

1.search函数

简介:

代码语言:javascript
复制
re.search(pattern,string,flags=0)
#在一个字符串中搜索匹配正则表达式的第一个位置

其中,相关参数表示为:

pattern :正则表达式的字符串或原生字符串表示

string:待匹配字符串

flags:正则表达式使用时的控制标记

这里提到一个新概念标记,在我们要提取的信息中,可能只会抓取部分字符,这时候我们便可以用标记,然后抓取从标记开始的部分。

常用标记

说明:

re.I

也叫re.IGNORECASE 忽略正则表达式的大小写,[A-Z]能匹配小写字符

re.M

re.MULTILINE 正则表达式中的^操作符能够将给定字符串的每行当作匹配开始

re.S

re.DOTALL 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

例子:

代码语言:javascript
复制
import re
match=re.search(r'[1-9]\d{5}' , 'BIT 100081')
if match:
    print(match.group(0))

运行结果:

2.match函数

简介:

代码语言:javascript
复制
re.match(pattern,string,flags=0) 
#从一个字符串的开始位置起匹配正则表达式,返回match对象

其中,相关参数表示为:

pattern :正则表达式的字符串或原生字符串表示

string:待匹配字符串

flags:正则表达式使用时的控制标记

例子:

代码语言:javascript
复制
import re
match=re.match(r'[1-9]\d{5}' , '100081 BIT')
if match:
    print(match.group(0))

运行结果:

3.findall函数

简介:

代码语言:javascript
复制
re.findall(pattern,string,flags=0)
#搜索字符串,以列表类型返回全部能匹配的子串

相关参数和之前函数的参数相差不大,这里不展示了哈。

例子:

代码语言:javascript
复制
import re
ls=re.findall(r'[1-9]\d{5}' , 'BIT100081 TSU100084')
print(ls)

运行结果:

4.split函数

简介:

代码语言:javascript
复制
re.split(pattern,string,maxsplit=0,flags=0) 
#将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

其中,相关参数表示为:

pattern:正则表达式的字符串或原生字符串表示

string:待匹配字符串

maxsplit:最大分割数,剩余部分作为最后一个元素输出

flags:正则表达式使用时的控制标记

例子:

代码语言:javascript
复制
import re
ls=re.split(r'[1-9]\d{5}' , 'BIT100081 TSU100084')
print(ls)

运行结果:

当我们在函数中调用maxsplit参数时,如下:

代码语言:javascript
复制
import re
ls=re.split(r'[1-9]\d{5}' , 'BIT100081 TSU100084',maxsplit=1)
print(ls)

运行结果:

5.finditer函数

简介:

代码语言:javascript
复制
re.finditer(pattern,string,flags=0) 
#搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

例子:

代码语言:javascript
复制
import re
for m in re.finditer(r'[1-9]\d{5}' , 'BIT100081 TSU100084'):
    if m:
        print(m.group(0))

运行结果:

6.sub函数

简介:

代码语言:javascript
复制
re.sub(pattern,repl,string,count=0,flags=0)
#在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

其中,相关参数表示为:

pattern:正则表达式的字符串或原生字符串表示

repl:替换匹配字符串的字符串

string:待匹配字符串

count:匹配的最大替换次数

flags:正则表达式使用时的控制标记

例子:

代码语言:javascript
复制
import re
mat=re.sub(r'[1-9]\d{5}' , ':zipcode','BIT100081 TSU100084')
print(mat)

运行结果(返回类型):

关于更多正则库的用法,还待后续...

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

本文分享自 程序员Bob 微信公众号,前往查看

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

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

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