python爬虫-re正则表达式

本文详细介绍了Python中re库的功能与使用方法,包括字符串匹配、修改与构造正则表达式的技巧。涵盖match、search、findall及sub等方法,并提供实例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这节课来学习一下什么是re库(正则表达式)

功能:判断字符串是否符合一定标准

注意:是对字符串进行操作,所以操作前应转换为str

本篇是使用方法,正则表达式大全需要另行检索
这里推荐一个正则表达式测试工具箱:http://tooloschina.net/regex/

一、字符串匹配

1.1.首先介绍match()方法

格式:match(正则表达式,待匹配的字符串)
功能:检测这个正则表达式是否匹配这个字符串
特点:从字符串起始位置开始匹配
实例对象的两个方法:
group():输出匹配到的内容
span():输出匹配的范围

import re

content = 'hello 123 4567 world_this is a regex demo'
result = re.match('^hello\s\d\d\d\s\d{4}\s\w{10}',content)
>>> print(result)
>>> <_sre.SRE_Match object; span=(0, 25), match = 'hello 123 4567 world_this' >

>>> print(result.group())   # 从第一个字符开始匹配,匹到哪算哪
>>> hello 123 4567 world_this

>>> print(result.span())    # 匹配范围
>>> (0, 25)

1.2.search()

格式:search(正则表达式,待匹配的字符串)
功能:检测这个字符串中是否有能被正则匹配到的内容
特点:match()是从第一个元素开始匹配,若第一个不符则认定为NONE,而search可以从任意位置匹配(中间截取),返回的是第一个匹配到的
实例对象的两个方法:
group(num):输出匹配到的第num个内容
span():输出匹配的范围

1.3.findall()

格式:findall(正则表达式,待匹配的字符串)
功能:检测这个字符串中是否有能被正则匹配到的内容
特点:search返回的是第一个匹配到的,而findall()将字符串中所有满足条件的做成列表返回(可以通过for遍历)

二、字符串修改之—sub()

在之前的字符串处理中我们学过通过replace()方法可以修改字符串。
但数据量大的话就很麻烦。
re库给我们提供了高效的方法:
re.sub()
格式:re.sub(b,B,字符串A):将字符串A中的b修改为B
功能:批量替换
特点:b可以用正则表达式表示,这就很高效了

三、构造正则表达式

通常的正则表达式滴滴答答一长串,直接放在一中里面未免不优雅,所以先给它实例化封装:
compile():可以将字符串编译成正则表达式对象,在后面也能重复使用哦

p = re.compile('\d{2}')

四、一些技巧

4.1 常用的匹配规则

模式      描述
\w      # 匹配:字母、数字、下划线
\W      # 匹配:不是字母、数字、下划线的字符
\s      # 匹配:任意空白字符(等价于[\t\n\r\f])
\S      # 匹配:任意非空字符
\d      # 匹配:任意数字(等价于[0-9])
\D      # 匹配:任意非数字
\A      # 匹配:字符串开头
\Z      # 匹配:字符串结尾,若存在换行,则匹配到该行最后一个字符
\z      # 匹配:字符串结尾,若存在换行,还会匹配到换行符
\G      # 匹配:最后匹配完成的位置
\n      # 匹配:一个换行符
\t      # 匹配:一个制表符
^       # 匹配:一行字符串的开头
$       # 匹配:一行字符串的结尾
.       # 匹配:除换行符外的任意字符
[...]   # 匹配:一组字符单独列出,如[amk]:匹配a或m或k
[^...]  # 匹配:不在[]中的字符
*       # 匹配:0个或多个表达式
+       # 匹配:1个或多个表达式
?       # 匹配:0个或1个前面正则表达式定义的片段,非贪婪
{n}     # 精确匹配:n个前面的表达式
{n, m}  # 匹配:n到m次前面正则表达式定义的片段,贪婪
a|b     # 匹配:a或b
()      # 匹配:括号内的表达式

4.2 匹配目标

想从字符串中提取某个位置的内容,用小括号提取
如:
a = ‘叮叮叮sdfadf!@#¥123当当当’
想要提取叮叮叮和当当当中间的这堆字符
可以这么写
p = re.compile(‘叮叮叮(.*?)当当当’)
(.*?)表示用非贪婪的方式提取任意字符0个或多个
贪婪:当正则表达式最后一个找到匹配项后,再向后找看看还有没有符合的,有就继续匹
非贪婪:当正则表达式最后一个找到匹配项后,不再匹配了,over

4.3 修饰符(可选)

常用的修饰符

re.I    # 使匹配对大小写不敏感
re.L    # 做本地化识别匹配
re.M    # 多行匹配,影响^和$
re.S    # 使.匹配包含换行符在内的所有字符(常用)
re.U    # 根据Unicode字符集解析字符,影响:\w、\W、\b、\B
re.X    # 该标志通过给予你更灵活的格式,以便你将正则表达式写得更易于理解
m = re.findall('正则表达式','被检验的字符串',re.S)

五、小栗子

import re
# 创建模式对象

# 制定规则
pat = re.compile('AA')  # 此处的AA是正则表达式的内容,用于验证其他字符串

# 返回none或找到符合正则表达式的字符串位置
m = pat.search('aa')    # search字符串被校验的内容
m = pat.search('AA')
m = pat.search('aASDAA')

# 将上面的合并
m = re.search('正则表达式','被检验的字符串')


# 将被检验的字符串中所有符合正则表达式的值作为list返回
m = re.findall('正则表达式','被检验的字符串')

# sub  批量替换
re.sub("a","A","aasdcdwsda")    # 在第三个字符串中的a全部替换为A

# 在正则表达式中被比较字符串前面加上r,可避免转义字符
a = r"\aabd-\'"

你学会了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值