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爱好者指正,小弟定当虚心受教!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-Android Online Test函数

Android在线测试模拟了真正的在线认证考试。您将看到基于 Android概念的多项选择题(MCQ),将为您提供四个options。您将为该问题选择最合适的答案,然后继续进行下一个问题,而不会浪费时间。完成完整的考试后,您将获得在线考试分数。 总问题数-20 最长时间-20分钟 Start Test …

Matlab图像处理-线性变换

线性变换 空间域处理技术是直接对图像的像素进行操作。灰度变换不改变原图像中像素的位置&#xff0c;只改变像素点的灰度值&#xff0c;并逐点进行&#xff0c;和周围的其他像素点无关。 灰度线性变换即是对图像的灰度做线性拉伸、压缩&#xff0c;映射函数为一个直线方程。…

并发控制:上下文、中断屏蔽和原子变量

一、上下文和并发场合 执行流&#xff1a;有开始有结束总体顺序执行的一段代码 又称上下文 应用编程&#xff1a;任务上下文 内核编程&#xff1a; 任务上下文&#xff1a;五状态 可阻塞 a. 应用进程或线程运行在用户空间 b. 应用进程或线程运行在内核空间&#xff08;通过调…

ESB(Enterprise Service Bus,即企业服务总线)

以前用过部分功能&#xff0c;但是没有很好地去理解过。 ESB&#xff08;Enterprise Service Bus&#xff0c;即企业服务总线&#xff09;是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢&#xff0c;是构筑企业神经系统的必要元素。 企业服…

软件测试/测试开发丨Selenium 高级定位 Xpath

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27036 一、xpath 基本概念 XPATH是一门在XML文档中查找信息的语言 XPATH使用路径表达式在XML文档中进行导航 XPATH的应用非常广泛&#xff0c;可以用于UI自…

计算机视觉-卷积神经网络

目录 计算机视觉的发展历程 卷积神经网络 卷积&#xff08;Convolution&#xff09; 卷积计算 感受野&#xff08;Receptive Field&#xff09; 步幅&#xff08;stride&#xff09; 感受野&#xff08;Receptive Field&#xff09; 多输入通道、多输出通道和批量操作 …

SQL高阶语句

1、概念 1.1、概述 在MySQL中&#xff0c;高阶语句是指一些复杂、高级的查询语句或操作&#xff0c;用于满足更特定和复杂的数据需求。这些高阶语句通常涉及更多的SQL功能和技巧&#xff0c;以扩展MySQL的功能和性能。 在MySQL中&#xff0c;它们扩展了基本的SELECT、INSERT、…

实现基于栈的表达式求值计算器(难度4/10)

本作业主要考察&#xff1a;解释器模式的实现思想/栈结构在表达式求值方面的绝对优势 C数据结构与算法夯实基础作业列表 通过栈的应用&#xff0c;理解特定领域设计的关键作用&#xff0c;给大家眼前一亮的感觉。深刻理解计算机语言和人类语言完美结合的杰作。是作业中的上等…

【SpringSecurity】九、Base64与JWT

文章目录 1、base64编码2、Base64Url3、JWT的产生背景4、JWT介绍5、JWT组成5.1 Header5.2 Payload5.3 Signature 6、JWT的使用方式7、JWT的几个特点 1、base64编码 base64是一种编码方式&#xff0c;不是加密方式。 所谓Base64&#xff0c;就是说选出64个字符&#xff1a;小写…

并发编程的故事——共享模型之内存

共享模型之内存 文章目录 共享模型之内存一、JVM内存抽象模型二、可见性三、指令重排序 一、JVM内存抽象模型 主要就是把cpu下面的缓存、内存、磁盘等抽象成主存和工作内存 体现在 可见性 原子性 有序性 二、可见性 出现的问题 t线程如果频繁读取一个静态变量&#xff0c;那…

JavaWeb 速通Ajax

目录 一、Ajax快速入门 1.基本介绍 : 2.使用原理 : 二、Ajax经典入门案例 1.需求 : 2.前端页面实现 : 3. 处理HTTP请求的servlet实现 4.引入jar包及druid配置文件、工具类 : 5.Domain层实现 : 6.DAO层实现 : 7.Service层实现 : 8.运行测试 : 三、JQuery操作Ajax 1 …

vue使用qrcodejs2生成二维码

目录 概要 构建展示的vue组件qrcode.vue 组件的使用 概要 项目中用到需要展示二维码的样式&#xff0c;想到了qrcode 例如&#xff1a; 前提&#xff1a;安装包 npm install qrcodejs2 --save 构建展示的vue组件qrcode.vue <template><div style"width: …

Opencv基于文字检测去图片水印

做了一个简单的去水印功能&#xff0c;基于文字检测去图片水印。效果如下&#xff1a; 插件功能代码参考如下&#xff1a; using namespace cv::dnn; TextDetectionModel_DB *textDetector0; void getTextDetector() {if(textDetector)return;String modelPath "text_de…

拥抱储能新时代!科士达闪耀EESA第二届中国国际储能展览会

2023年8月30日&#xff0c;EESA第二届中国国际储能展览会在苏州国际博览中心拉开帷幕&#xff0c;科士达以“零碳光储数能未来”为主题&#xff0c;亮相G3-20展台&#xff0c;多维度展现户用光储、工商业储能、大型储能等解决方案&#xff0c;彰显安全、高效、可靠的产品性能和…

大数据时代下的精准营销

在大数据时代&#xff0c;人们的信息越来越透明&#xff0c;留在网络上的各种数据也是企业进行营销的一个重要的生产要素。一直以来&#xff0c;营销的科学性正是因为运用了自然科学中一级互联网中的数据收集手段&#xff0c;严谨的记录、搜集和分析消费者的各项数据和日常生活…

Java单元测试及常用语句 | 京东物流技术团队

1 前言 编写Java单元测试用例&#xff0c;即把一段复杂的代码拆解成一系列简单的单元测试用例&#xff0c;并且无需启动服务&#xff0c;在短时间内测试代码中的处理逻辑。写好Java单元测试用例&#xff0c;其实就是把“复杂问题简单化&#xff0c;建单问题深入化“。在编写的…

【核磁共振成像】相位差重建

目录 一、相位差map重建一般步骤和反正切函数主值范围二、反正切运算三、可预期相位误差和伴随场的校正四、图形变形校正 一、相位差map重建一般步骤和反正切函数主值范围 MRI是一个相敏成像模态&#xff0c;MR原始数据傅里叶变换后的复数图像中每个像素值有模和相位。标准模重…

Mysql高级语句

高级语句 1.按关键字排序 SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC ASC 是按照升序进行排序的&#xff0c;是默认的排序方式&#xff0c;即 ASC 可以省略。 SELECT 语句中如果没有指定具体的排序方式&#xff0c;则默认按 ASC…

【数据结构】——查找、散列表的相关习题

目录 一、选择填空判断题题型一&#xff08;顺序、二分查找的概念&#xff09;题型二&#xff08;分块查找的概念&#xff09;题型三&#xff08;关键字比较次数&#xff09; 二、应用题题型一&#xff08;二分查找判定树&#xff09; 一、选择填空判断题 题型一&#xff08;顺…

Leetcode328 奇偶链表

思路&#xff1a;分别处理奇偶&#xff0c;保存奇偶的第一个和最后一个节点&#xff0c;注意最后链接的时候需要把偶数的next去掉再拼接不然就成环了 class Solution:def oddEvenList(self, head: ListNode) -> ListNode:if not head or not head.next or not head.next.ne…