Python中的正则表达式

介绍

对于xpath和bs4不能匹配的数据,可以用正则表达式。正则表达式可以用于匹配复杂的数据,获取目标数据。

match方法

语法:match(正则表达式, 字符串)方法:

  1. 参数1是匹配的正则表达式书写规则;
  2. 参数2是从这个字符串中查询匹配;
  3. 从第一个字符开始匹配,参数1表达式第一个字符必须匹配
  4. 只匹配一次;
  5. 匹配成功,返回结果是正则对象;匹配失败,返回None;
  6. 使用 .group() 获取匹配内容;

实例代码:

python 复制代码
# 注意:需要导入re模块
import re

# 匹配到结果
s1 = 'python java css html'
res = re.match('python', s1).group()
print(res)

# 匹配不到结果
s1 = 'C++ python java css html'
# 因为匹配规则开头是python,但是匹配的字符不是以python开始的,所以无法匹配到结果
res = re.match('python', s1).group()
print(res)

search方法

语法:search(正则表达式, 字符串)方法:

  1. 参数1是匹配的正则表达式书写规则;
  2. 参数2是从这个字符串中查询匹配;
  3. 不重头开始开始匹配,参数1表达式不一定必须匹配
  4. 只匹配一次;
  5. 匹配成功,返回结果是正则对象;匹配失败,返回None;
  6. 使用 .group() 获取匹配内容;

总结:search和match不同的是,不重头开始匹配。

findall方法

  1. 参数1是匹配的正则表达式书写规则;
  2. 参数2是从这个字符串中查询匹配;
  3. 匹配多次,不限位置;
  4. 返回值是列表;
  5. 使用下标取值;

正则规则

. : 表示除了换行符之外,任意一个字符;

* : 表示前面的表达式出现一次或任意次;(尽可能多匹配)

? : 表示前面的表达式出现0次或1次;(尽可能少匹配)

\d : 表示匹配一个数字

\ : 转义字符

贪婪匹配和非贪婪匹配

贪婪匹配:.*

非贪婪匹配:.*?

示例代码:

python 复制代码
# 贪婪匹配:.*
s1 ='<div>几个字符</div><a href="https://www.baidu.com"></a><div>Python</div>'
res = re.search('<div>.*</div>', s1).group()
print(res)  # <div>几个字符</div><a href="https://www.baidu.com"></a><div>Python</div>

# 非贪婪匹配:.*?
s1 ='<div>几个字符</div><a href="https://www.baidu.com"></a><div>Python</div>'
res = re.search('<div>.*?</div>', s1).group()
print(res)  # <div>几个字符</div>

分组

分组,也叫二次提取。使用括号包裹正则表达式,第一个括号包裹的方法是 .group(1) ,以次类推。

示例代码:

python 复制代码
# 分组,二次提取数据
s1 ='<div>几个字符</div><a href="https://www.baidu.com"></a><div>Python</div>'
res = re.search('<div>(.*)</div><a href="(.*)">.*</a>', s1)
g1 = res.group(1)
g2 = res.group(2)
print(g1)  # 几个字符
print(g2)  # https://www.baidu.com

正则表达式默认不能匹配换行,如果需要匹配换行,可以在match方法或findall方法中添加第三个参数:re.S

python 复制代码
import re

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

re.findall('正则表达式', '字符串', re.S)
相关推荐
狗狗学不会7 分钟前
RK3588 极致性能:使用 Pybind11 封装 MPP 实现 Python 端 8 路视频硬件解码
人工智能·python·音视频
love530love18 分钟前
EPGF 新手教程 21把“环境折磨”从课堂中彻底移除:EPGF 如何重构 AI / Python 教学环境?
人工智能·windows·python·重构·架构·epgf
ldccorpora18 分钟前
Chinese News Translation Text Part 1数据集介绍,官网编号LDC2005T06
数据结构·人工智能·python·算法·语音识别
大学生毕业题目19 分钟前
毕业项目推荐:99-基于yolov8/yolov5/yolo11的肾结石检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·肾结石检测
源代码•宸20 分钟前
Leetcode—1266. 访问所有点的最小时间【简单】
开发语言·后端·算法·leetcode·职场和发展·golang
寄思~20 分钟前
Excel 数据匹配工具 -笔记
笔记·python·学习·excel
遇见~未来24 分钟前
JavaScript数组全解析:从本质到高级技巧
开发语言·前端·javascript
南屿欣风24 分钟前
Sentinel 熔断规则 - 异常比例(order & product 示例)笔记
java·开发语言
u01040583631 分钟前
使用Java实现高性能的异步编程:CompletableFuture与Reactive Streams
java·开发语言
朔北之忘 Clancy38 分钟前
2020 年 6 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·尺取法