Python爬虫基础之正则表达式

目录

一、什么是正则表达式?

二、re.compile()编译函数

三、group()获取匹配结果函数

四、常用匹配规则

4.1匹配单个字符

4.2匹配前字符次数

4.3匹配原生字符串

4.4匹配字符串开头和结尾

4.5分组匹配

五、re.match()开头匹配函数

六、re.search()全文搜索函数

七、re.findall()查找所有函数

八、re.sub()与re.subn()查找替换函数

九、re.split()分割字符串函数 

十、贪婪模式和非贪婪模式


一、什么是正则表达式?

所谓的正则表达式其实就是一些特殊字符规则组合。通过这些字符规则组合开发者可以检索并替换出一些符合这种规则的字符串文本数据。

二、re.compile()编译函数

可以将包含有正则表达式的字符串编译成字节码。

优点:之前每次调用re.match( )函数匹配字符串时,python解释器就会为其频繁的申请和释放空间,用来保存其正则表达式字符串。而通过调用re.complie( )函数,解释器只需为包含有正则表达式的字符串申请一次内存空间就可以了,以后每使用此正则表达式匹配字符串时就可以直接拿来用,而无需重复频繁为其申请内存空间,从而在很大程度上提高运行效率。

三、group()获取匹配结果函数

groups( )方法的返回值是一个元组,元组中包含正则表达式内所有捕获组()检索到的字符串。

group()方法用来获取正则表达式检索到的字符串。一般在re.match( )的正则表达式实参中一个小括号就是一个捕获组。

用法:group( 捕获组0[,捕获组1][,捕获组2][......] )

0: 表示获取正则表达式检索到的源字符串结果,这也是默认值。

1: 表示获取正则表达式中第一个()检索到的字符串

2: 表示获取正则表达式中第二个()检索到的字符串

    以此类推........

 

四、常用匹配规则

4.1匹配单个字符

.(点):匹配任意一个字符,除了换行符'\n'。

[abc...]:匹配一个字符,此字符可以是a、b或c。也可以写成范围[a-z]。

\d:匹配一个数字,即0~9。

\D:匹配除数字外的任意一个字符。

\s:匹配一个空格,一个tab键相当于2个空格。

\S:匹配除空格或tab键之外的任意一个字符。

\w:匹配一个普通字符,即a-z、A-Z、0-9、_

\W:匹配一个非普通字符即特殊字符,如:空格、@、$等

运行结果:

 

 4.2匹配前字符次数

* :前一个字符可以匹配0次、1次或多次即任意次。直到不满足匹配规则返回之前匹配到的字符串。

+ :前一个字符必须至少匹配1次,否则匹配失败。

?:前一个字符最多匹配1次或者不匹配返回空字符。

{m} :前一个字符必须精确匹配m次。

{m,} :前一个字符至少匹配m次,直到不满足匹配规则结束。

{mix,max} :前一个字符必须匹配min~max次 即最少匹配min次,最多匹配max次;且不能为负数。

注意:以上字符需要与前一个字符配合使用即作用于前字符。

  4.3匹配原生字符串

在许多编程语言中"\"往往表示转义字符,如:\n表示换行、\t表示tab键;为了表示"\"本身需要再加一个\ ,形成”\\“格式。或者在字符串的前面加“r"字符:表示按肉眼看到的字符串原意检索。

4.4匹配字符串开头和结尾

^str  :表示字符串开头,即匹配以str开头的字符串

[^a]  :此时“^”表示取反,即匹配除字母a的任意一个字符

str$  :表示字符串结尾,即匹配字符串的结尾即检索的目标字符串必须以str结尾

4.5分组匹配

str1|str2  : 表示从左到右分别匹配str1或str2的正则字符串表达式。一旦有一方匹配成功则返回结果值。

(ab)  :表示将括号中正则表达式匹配到的结果作为一个分组。即在正则表达式参数中一个括号代表一个分组。

\num  : 表示引用正则表达式前面括号分组num匹配到的字符串。

(?P<name>) :表示给正则表达式的分组起别名。

(?P=name) :表示引用前面正则表达式分组别名name所匹配到的字符串。

五、re.match()开头匹配函数

re.match()函数只能匹配字符串的开头。如果要匹配的正则表达式字符串不在原字符串的开头则匹配不成功返回值None;匹配成功返回re.match类对象。

用法:re.match(pattern,string,flags)

pattern: 要匹配的正则表达式

string: 要检索的源字符串文本

flags:  标志位,用来控制正则表达式的匹配方式,如: re.I表示忽略大小写,re.M表示多行匹配,re.S使正则表达式中“.”的匹配包括换行符\n在内任意一个字符等等。

六、re.search()全文搜索函数

从全文中从前往后搜索指定字符串,一旦找到则立即返回搜索到的对象。

用法:re.search(pattern,dest, flags)

pattern:  正则表达式字符串

dest:  要对其搜索的文本字符串

flags:  标志位。re.I忽略大小写,re.M多行匹配

 说明:span=(14,19)表示匹配到的字符串在源文本中的下标位置,不包含19。

七、re.findall()查找所有函数

用法:re.findall(pattern,dest_str,flags)

pattern:  正则表达式字符串

dest_str:  要对其搜索的文本字符串

flags:  控制正则表达式匹配方式。re.I忽略大小写,re.M多行匹配

八、re.sub()与re.subn()查找替换函数

re.sub( )函数: 将文本字符串中正则表达式查找到的字符串替换为指定的字符串后并返回。

用法:re.sub(pattern,sub,dest_str,counts=0,flags)

pattern: 匹配模式即正则表达式

sub:  替换为的字符串

dest_str: 要替换的文本字符串

counts:  替换的最大次数,默认为0表示替换全部

flags:控制正则表达式匹配方式

 说明: re.subn( )函数与re.sub( )函数的功能一样。只不过在以元组的形式返回替换后的文本字符串时,还会包含原文被替换的字符串个数。

九、re.split()分割字符串函数 

以文本字符串中的某个字符作为分割符,实现对文本字符串的分割并以列表的形式返回分割后的文本字符串。

用法:re.split(pattern, dest_str, max_split, flags)

pattern:  分割符

dest_str:  要分割的文本字符串

max_split:  最大分割数。默认为0表示无限制

flags:  设置正则表达式匹配的方式。

十、贪婪模式和非贪婪模式

贪婪模式:在满足正则规则的情况下尽可能多的匹配字符

非贪婪模式: 在满足正则规则的情况下尽可能少的匹配字符

在python正则表达式的数量匹配字符中默认是贪婪模式,如果想将正则表达式的匹配变为非贪婪模式只需在数量匹配字符的后面加上?如:"*",“+”,“?”,{min,max}

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/62881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript Web APIs -03 事件流、事件委托、其他事件(加载、滚动、尺寸)

Web APIs - 03 文章目录 Web APIs - 03事件流捕获和冒泡阻止冒泡 事件委托其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 进一步学习 事件进阶&#xff0c;实现更多交互的网页特效&#xff0c;结合事件流的特征优化事件执行的效率 掌握阻止事件冒泡的方法理解事…

【MySQL系列】索引的学习及理解

「前言」文章内容大致是MySQL索引的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、索引概念二、从硬件角度理解2.1 磁盘2.2 结论 三、从软件角度理解四、共识五、索引的理解5.1 一个现象和结论5.2 对Page进行建模5.3 索引可以采用的数据结构5.…

opencv-人脸识别

对https://blog.csdn.net/weixin_46291251/article/details/117996591这哥们代码的一些修改 import cv2 import numpy as np import os import shutil import threading import tkinter as tk from PIL import Image, ImageTkchoice 0# 首先读取config文件&#xff0c;第一行…

多线程(额外扩展)(面试会用)

1 线程状态 1.1 状态介绍 当线程被创建并启动以后&#xff0c;它既不是一启动就进入了执行状态&#xff0c;也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢&#xff1f;Java中的线程 状态被定义在了java.lang.Thread.State枚…

使用飞桨实现的第一个AI项目——波士顿的房价预测

part1.首先引入相应的函数库: 值得说明的地方&#xff1a; &#xff08;1&#xff09;首先&#xff0c;numpy是一个python库&#xff0c;主要用于提供线性代数中的矩阵或者多维数组的运算函数&#xff0c;利用import numpy as np引入numpy&#xff0c;并将np作为它的别名 part…

基于OFDM的水下图像传输通信系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 function [rx_img] func_TR(tx_img, num_path, pathdelays, pathgains, snr) rng(default); …

【C++】set和map

set和map 1. 预备知识2. set2.1 set的概念2.2 set的常见接口 3. multiset4. map4.1 map的概念4.2 map的常见接口 5. multimap6. 练习 1. 预备知识 set和map是关联式容器&#xff0c;里面存储的不是元素本身&#xff0c;存储的是<key,value>结构的键值对&#xff0c;比ve…

日本橙皮书数据库—《医疗用医药品质量情报集》

日本橙皮书是一份关于医疗用医药品质量情报的汇总报告&#xff0c;由日本厚生劳动省发布。它主要涵盖了药品的品质再评价信息&#xff0c;特别是针对特定历史阶段的产品&#xff0c;笔者总结信息如下&#xff1a; ①日本橙皮书数据库包含了一系列药品的详细信息&#xff0c;如…

43、基于 springboot 自动配置的 spring mvc 错误处理,就是演示项目报错后,跳转到自定义的错误页面

Spring MVC 的错误处理&#xff1a;基于 SpringBoot 自动配置之后的 Spring MVC 错误处理。 就是访问方法时出错&#xff0c;然后弄个自定义的错误页面进行显示。 ★ 两种错误处理方式 方式一&#xff1a; 基于Spring Boot自动配置的错误处理方式&#xff0c;只要通过属性文件…

原生js实现轮播图及无缝滚动

我这里主要说轮播图和无缝滚动的实现思路&#xff0c;就采用最简单的轮播图了&#xff0c;当然实现的思路有很多种&#xff0c;我这也只是其中一种。 简单轮播图的大概结构是这样的&#xff0c;中间是图片&#xff0c;二边是箭头可以用来切换图片&#xff0c;下面的小圆点也可以…

Unity3d C#实现调取网络时间限制程序的体验时长的功能

前言 如题的需求应该经常在开发被提到&#xff0c;例如给客户体验3–5天的程序&#xff0c;到期后使其不可使用&#xff0c;或者几年的使用期限。这个功能常常需要使用到usb加密狗来限制&#xff0c;当然这也的话就需要一定的硬件投入。很多临时提供的版本基本是要求软件来实现…

代理模式 静态代理和动态代理(jdk、cglib)——Java入职第十一天

一、代理模式 一个类代表另一个类去完成扩展功能,在主体类的基础上,新增一个代理类,扩展主体类功能,不影响主体,完成额外功能。比如买车票,可以去代理点买,不用去火车站,主要包括静态代理和动态代理两种模式。 代理类中包含了主体类 二、静态代理 无法根据业务扩展,…

在ubuntu上安装ns2和nam(ubuntu16.04)

在ubuntu上安装ns2和nam 版本选择安装ns2安装nam 版本选择 首先&#xff0c;版本的合理选择可以让我们避免很多麻烦 经过测试&#xff0c;ubuntu的版本选择为ubuntu16.04&#xff0c;ns2的版本选择为ns-2.35&#xff0c;nam包含于ns2 资源链接(百度网盘) 链接:https://pan.bai…

简单数学题:找出最大的可达成数字

来看一道简单的数学题&#xff1a;力扣2769. 找出最大的可达成数字 题目描述的花里胡哨&#xff0c;天花乱坠&#xff0c;但这道题目非常简单。我们最多执行t次操作&#xff0c;只需每次操作都让x-1&#xff0c;让num1&#xff0c;执行t次操作后&#xff0c;x就变为xt&#xff…

腾讯音乐如何基于大模型 + OLAP 构建智能数据服务平台

本文导读&#xff1a; 当前&#xff0c;大语言模型的应用正在全球范围内引发新一轮的技术革命与商业浪潮。腾讯音乐作为中国领先在线音乐娱乐平台&#xff0c;利用庞大用户群与多元场景的优势&#xff0c;持续探索大模型赛道的多元应用。本文将详细介绍腾讯音乐如何基于 Apach…

基于蛇优化算法优化的BP神经网络(预测应用) - 附代码

基于蛇优化算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于蛇优化算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.蛇优化优化BP神经网络2.1 BP神经网络参数设置2.2 蛇优化算法应用 4.测试结果&#xff1a;5.Matlab代…

java+springboot+mysql水电管理系统

项目介绍&#xff1a; 本系统为新版基于SpringBoot的水电管理系统&#xff1a; 使用javaspringbootmysql开发的水电费管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理、用户管理…

RK3588开发板编译环境Ubuntu20.04编译配置增加交换内存

迅为提供的编译环境 Ubuntu20.04 默认配置了交换内存是 9G&#xff0c;如果在编译过程中&#xff0c;因内 存不够而编译报错&#xff0c;可以参考本小节进行设置。 这里举例分配 5G 交换内存。 在开始之前&#xff0c;使用命令检查一下您的 ubuntu 的 swap 分区。 sudo swa…

Java从入门到精通-流程控制(一)

流程控制 1.复合语句 复合语句&#xff0c;也称为代码块&#xff0c;是一组Java语句&#xff0c;用大括号 {} 括起来&#xff0c;它们可以被视为单个语句。复合语句通常用于以下情况&#xff1a; - 在控制结构&#xff08;如条件语句和循环&#xff09;中包含多个语句。 - …

直播预约|哪吒汽车岳文强:OEM和Tier1如何有效对接网络安全需求

信息安全是一个防护市场。如果数字化程度低&#xff0c;数据量不够&#xff0c;对外接口少&#xff0c;攻击成本高&#xff0c;所获利益少&#xff0c;自然就没有什么攻击&#xff0c;车厂因此也不需要在防护上花费太多成本。所以此前尽管说得热闹&#xff0c;但并没有太多真实…