当前位置: 首页 > news >正文

Python正则表达式初识(二)

前几天给大家分享了Python正则表达式初识(一),介绍了正则表达式中的三个特殊字符“^”、“.”和“*”,感兴趣的伙伴可以戳进去看看,今天小编继续给大家分享Python正则表达式相关特殊字符知识点。


1、特殊字符“$”代表的意思是结尾字符。举个栗子,正则表达式“3$”,表示匹配以3为结尾的字符串。代码演示如下图所示。


正则表达式匹配模式“.*3$”代表以3结尾的任意字符的字符串,很显然匹配的结果和原始字符串是一致的,所以有返回结果。
2、如果将正则表达式匹配模式改为“.*4$”,则表示以4结尾的任意字符的字符串,此时是没有任何的输入结果的,如下图所示。


3、正则表达式特殊字符“?”比较常用,其代表的意思是非贪婪匹配模式。默认情况下,匹配字符串是一种贪婪的匹配,换句话说,默认情况下字符串会根据匹配模式,去匹配最大的长度。
4、下图是一个实例。其中括号代表的是提取字符串的子串,正则表达式会把满足匹配条件的字符串放到括号里边。匹配模式“.*(p.*p).*”代表的意思是:左边的“.* ”的意思是任意字符串,可以是空,也可以是非空的字符串,之后是字符p,中间的“.* ” 的意思也是任意字符串,之后再是一个p,尔后右边的“.* ” 的意思也是任意字符串。目前的逻辑就是将两个p中间的字符串连同p一块取出。


但是其输出的结果却为“pp”,并不是我们想要的“pccccccccccp”结果。原因是正则表达式的贪婪匹配所致,实际上它是反向匹配的,所以从字符串来看,匹配到的结果是“pp”。
5、如果我们使用非贪婪模式,即将匹配模式“.*(p.*p).*”改为模式“.*?(p.*p).*”,在第一“p”之前加个特殊字符“?”,则运行的结果就如下图所示。


可以看到匹配模式已经开始从左边开始进行匹配,答案趋向于我们想要的结果。但是在后面却出现了两个p。原因是后面的那个p未指定其为非贪婪模式,所以后面的那个p仍然是从右边开始反向取值的。
6、接下来,我们继续使用非贪婪模式,即将匹配模式“.*(p.*p).*”改为模式“.*?(p.*?p).*”,在第二“p”之前也加个特殊字符“?”,则运行的结果就如下图所示。


此时可以看到匹配的结果就是我们想要的结果了,原因是此时两个p均采用了非贪婪模式,所以匹配模式,从左到右顺序进行。
7、理解非贪婪模式之后,对于正则表达式的匹配就很好理解了,如下图的结果将返回“pcccp”,非贪婪模式下。


8、下图的结果将返回“pcccpcccccccpppp”,非贪婪模式和贪婪模式共存的情况下。


非贪婪模式在网络爬虫的过程中对于字符串的提取非常重要,务必要理解和掌握。小伙伴们,关于正则表达式的特殊字符“$”和“?”的用法,你们get到了吗?

相关文章:

  • public protected private与this用法
  • 笠翁对韵(全卷,珍藏版附注释)
  • 独领风骚的开源接口管理平台 YApi v1.3.23 发布
  • SQL Server页类型汇总+疑问
  • 实验报告二
  • JS页面跳转并及时刷新
  • WinServer2008安装MySql
  • 出栈次序问题 (转)
  • 使用SSM+Solr优雅的实现电商项目中的搜索功能
  • JSON格式
  • 安卓安装APK报错error: INSTALL_FAILED_UPDATE_INCOMPATIBLE
  • Android TV 开发(3)
  • [Head First设计模式]策略模式
  • CPU 已不足以驱动屏幕指纹识别技术,于是 vivo 用 DSP 来加速
  • 定义/控制自定义属性的使用
  • DataBase in Android
  • E-HPC支持多队列管理和自动伸缩
  • Java多态
  • node.js
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Vue ES6 Jade Scss Webpack Gulp
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何优雅地使用 Sublime Text
  • 使用权重正则化较少模型过拟合
  • 项目管理碎碎念系列之一:干系人管理
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 在weex里面使用chart图表
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • !!java web学习笔记(一到五)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (分布式缓存)Redis哨兵
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (力扣)1314.矩阵区域和
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • .NET Core 项目指定SDK版本
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET文档生成工具ADB使用图文教程
  • .py文件应该怎样打开?
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [C++]高精度 bign (重载运算符版本)
  • [CSS3备忘] transform animation 等
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例
  • [J2ME]如何替换Google Map静态地图自带的Marker