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

作者:小狐狸梦想去童话镇 时间:2023-02-26 17:13:21 

一、常见的匹配规则

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

二、常见的匹配方法

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()

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

来源:https://blog.csdn.net/gets_s/article/details/120090795

标签:python,正则表达式,python,网络爬虫
0
投稿

猜你喜欢

  • asp如何在网上查找链接?

    2010-06-22 21:10:00
  • mysql命令行如何操作

    2024-01-20 09:41:18
  • Mysql事务操作失败如何解决

    2024-01-27 15:17:50
  • thinkphp实现多语言功能(语言包)

    2024-05-22 10:05:21
  • python练习之曾经很火的小人画爱心表白代码

    2023-03-16 19:11:50
  • 详解Django将秒转换为xx天xx时xx分

    2023-06-14 22:52:12
  • 使用Python获取并处理IP的类型及格式方法

    2023-12-20 00:18:23
  • 删除pycharm鼠标右键快捷键打开项目的操作

    2022-06-01 22:08:31
  • MySQL数据库配置优化的方案

    2024-01-14 00:41:52
  • vscode通过Remote SSH远程连接及离线配置的方法

    2022-01-09 00:31:08
  • ExpiresAbsolute 属性

    2008-05-05 12:49:00
  • sql server常用命令行操作(启动、停止、暂停)

    2012-01-05 19:02:48
  • Python Sympy计算梯度、散度和旋度的实例

    2023-03-11 05:14:10
  • Python控制键盘鼠标pynput的详细用法

    2021-08-01 07:52:14
  • Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解

    2024-05-10 14:14:56
  • python 正则表达式参数替换实例详解

    2022-08-11 18:21:44
  • python+openCV对视频进行截取的实现

    2023-01-18 22:27:53
  • JS实现为排序好的字符串找出重复行的方法

    2024-04-10 10:49:53
  • springboot 启动时初始化数据库的步骤

    2024-01-26 18:32:57
  • python+requests接口自动化框架的实现

    2022-11-25 04:03:40
  • asp之家 网络编程 m.aspxhome.com