python网络爬虫精解之正则表达式的使用说明

 更新时间:2021年09月27日 08:57:35   作者:小狐狸梦想去童话镇  
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑

一、常见的匹配规则

在这里插入图片描述

二、常见的匹配方法

1、match()

match()方法从字符串的起始位置开始匹配,该方法有两个参数,第一个是正则表达式,第二个是需要匹配的字符串;

re.match(正则表达式,字符串)

如果该方法匹配成功,返回的是SRE_Match对象,如果未匹配到,则返回None。

返回成功后有两个方法,group()方法用来查看匹配到的字符串,span()方法用来输出匹配的范围。

import re
content = 'Hello_World,123 456'
result = re.match('^Hello\w{6}\W\d\d\d\s\d{3}',content)
print(result)
print(result.group())
print(result.span())

【运行结果】

<re.Match object; span=(0, 19), match='Hello_World,123 456'>
Hello_World,123 456
(0, 19)

子字符串匹配

在上述我们匹配到了完整的字符串,但是实际需求中可能只需要其中的一部分,这时我们仅需要在要获取的子字符串匹配时加上括号即可。

import re
content = 'Hello_World,123 456'
result = re.match('^Hello\w{6}\W(\d+)\s(\d{3})',content)
print(result)
print(result.group())
print(result.span())
print(result.group(1))
print(result.group(2))

【运行结果】

<re.Match object; span=(0, 19), match='Hello_World,123 456'>
Hello_World,123 456
(0, 19)
123
456

这样通过加括号的形式,将字符串中的数字匹配出来。

通用匹配符

.* 其中.用来匹配任意字符(除换行符),*代表前面出现的字符无限次。因此之前的匹配形式可以写为:

import re
content = 'Hello_World,123 456'
result = re.match('^Hello\.*456$',content)
print(result.group())

【运行结果】

Hello_World,123 456

贪婪匹配和非贪婪匹配

.*匹配是贪婪匹配

.*?是非贪婪匹配

二者的主要区别是,贪婪匹配尽可能多的去匹配字符,而非贪婪匹配是尽可能少的匹配字符。下列代码能够更直观的了解二者之间的区别

import re
content = 'number 12345678 test'
result_1 = re.match('^number.*(\d+).*test$',content)
print('贪婪匹配得到的数字:' + result_1.group(1))
result_2 = re.match('^number.*?(\d+).*test$',content)
print('非贪婪匹配得到的数字:' + result_2.group(1))

【运行结果】

贪婪匹配得到的数字:8
非贪婪匹配得到的数字:12345678

大家会有这样一个疑问为什么贪婪匹配得到的数字少,而非贪婪匹配得到的多,这与前面讲的不太符合啊。

注意,在匹配的时候,贪婪匹配是尽可能多的去匹配字符,因此.*就匹配的是' 1234567‘,只留下8给\d+匹配,非贪婪匹配是尽可能少的匹配字符,故.*?匹配的是' ',留下12345678给\d+匹配,就会得到上述结果。

修饰符

修饰符 作用
re.I 忽略大小写进行匹配
re.L 做本地化识别匹配
re.M 多行匹配,影响^和$
re.S 使.匹配包含换行符在内的所有字符
re.U 根据Unicode字符集解析字符
re.X 更加灵活的编写正则表达式

转义匹配

匹配特殊字符时,在其前面加反斜线(\)完成转义匹配。

2、search()

在匹配时会扫描整个字符串,然后返回第一个成功匹配的结果。如果将整个字符串搜索完了之后还是没有匹配到,则返回None。

3、findall()

与search()不同的是,findall()方法是将返回所有符合正则表达式匹配的内容。返回结果是一个列表,列表中的每个元素都是元组类型。

4、sub()

修改文本内容,原理是对要修改的内容进行替换。

import re
temp = "abcdef123ghi456"
temp = re.sub("\d+","",temp)
print(temp)

【运行结果】

abcdefghi

sub()中的参数分析,第一个参数是正则表达式匹配要更改的内容,第二个参数是使用该参数内容进行替换,第三个参数是要更改的字符串。

5、compile()

将正则字符串编译成正则表达式对象,以便在后面的匹配中进行复用。

到此这篇关于python网络爬虫精解之正则表达式的使用说明的文章就介绍到这了,更多相关python 正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3列表删除的三种方式实现

    Python3列表删除的三种方式实现

    本文主要介绍了Python3列表删除的三种方式实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • CentOS7.3编译安装Python3.6.2的方法

    CentOS7.3编译安装Python3.6.2的方法

    本篇文章主要介绍了CentOS7.3编译安装Python3.6.2的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • python 利用turtle库绘制笑脸和哭脸的例子

    python 利用turtle库绘制笑脸和哭脸的例子

    今天小编就为大家分享一篇python 利用turtle库绘制笑脸和哭脸的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python 用户交互输入input的4种用法详解

    python 用户交互输入input的4种用法详解

    这篇文章主要介绍了python 用户交互输入input的4种用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现

    TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现

    今天小编就为大家分享一篇TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python scipy 稀疏矩阵的使用说明

    python scipy 稀疏矩阵的使用说明

    这篇文章主要介绍了python scipy 稀疏矩阵的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python 3利用Dlib 19.7实现摄像头人脸检测特征点标定

    python 3利用Dlib 19.7实现摄像头人脸检测特征点标定

    这篇文章主要为大家详细介绍了python 3利用Dlib 19.7实现摄像头人脸检测特征点标定,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python基础语法之容器详解

    Python基础语法之容器详解

    这篇文章主要介绍了Python基础语法之容器的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下,希望能够给你带来帮助
    2021-09-09
  • Django ORM 查询表中某列字段值的方法

    Django ORM 查询表中某列字段值的方法

    这篇文章主要介绍了Django ORM 查询表中某列字段值的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • python中正则表达式findall的用法实例

    python中正则表达式findall的用法实例

    在写着自动化测试的脚本时重新复习了一下正则表达式findall()方法,下面这篇文章主要给大家介绍了关于python中正则表达式findall用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论