正则表达式(2)

文章目录
- 专栏导读
- 1、贪婪与非贪婪
- 2、转义匹配
专栏导读
✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。
✍ 本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。
✍ 订阅后,可以阅读《python网络爬虫实战教学》中全部文章内容,包含python基础语法、数据结构和文件操作,科学计算,实现文件内容操作,实现数据可视化等等。
✍ 其他专栏:《数据分析案例》 ,《机器学习案例》😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍
1、贪婪与非贪婪
使用通用匹配.*匹配到的内容有时候并不是我们想要的结果。
看下面的例子:
import re
content = "Hello 1234567 World_This is a Regex Demo"
result = re.match('^He.*(\d+).*Demo$', content)
print(result)
print(result.group(1))
这里我们依然想获取目标字符串中间的数字,所以正则表达式中间写的依然是(\d+)。而数字两侧由于内容比较杂乱,所以想省略来写,于是都写成.* 最后,组成^He.*(\d+).*Demo$,看样子没什么问题。
可我们看下运行结果:
<re.Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
7
奇怪的事情发生了,只得到了7这个数字,这是怎么回事?
这里涉及贪婪匹配和非贪婪匹配的问题。在贪婪匹配下,.*会匹配尽可能多的字符。正则表达式中。*后面是\d+,也就是至少一个数字,而且没有指定具体几个数字,因此,.*会匹配尽可能多的字符,这里就把123456都匹配了,只给\d+留下一个可满足条件的数字7,因此最后得到的内容就只有数字7。
但这很明显会给我们带来很大的不便。有时候,匹配结果会莫名其妙少一部分内容。其实,这里只需要使用非贪婪匹配就好了。非贪婪匹配的写法是 .*?,比通用匹配多了一个?,那么它可以起到怎样的效果?我们再用实例看一下:
import re
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match(r'^He.*?(\d+).*Demo$', content)
print(result)
print(result.group(1))
这里我们只是将第一个.* 改成了.*?,贪婪匹配就转变为了非贪婪匹配。结果如下:
<re.Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
1234567
此时便可以成功获取1234567了。原因可想而知,贪婪匹配是匹配尽可能多的字符,非贪婪匹配就是匹配尽可能少的字符。当.* ?匹配到Hello后面的空白字符时,再往后的字符就是数字了,而\d+恰好可以匹配,于是这里.?就不再进行匹配了,而是交给\d+去匹配。最后.?匹配了尽可能少的字符,Λd+的结果就是1234567。
所以说,在做匹配的时候,字符串中间尽量使用非贪婪匹配,也就是用.* ?代替.,以免出现匹配结果缺失的情况。但这里需要注意,如果匹配的结果在字符串结尾 . ?有可能匹配不到任何内容了,因为它会匹配尽可能少的字符。例如:
import re
content = "http://weibo.com/comment/kEraCN"
result1 = re.match("http.*?comment/(.*?)", content)
result2 = re.match("http.*?comment/(.*)", content)print('result1',result1.group(1))
print('result2',result2.group(1))
运行结果如下:
result1
result2 kEraCN
可以观察到, .*?没有匹配到任何结果,而.*则是尽量多匹配内容,成功得到了匹配结果。
2、转义匹配
我们知道正则表达式定义了许多匹配模式,如.用于匹配除换行符以外的任意字符。但如果目标字符串里面就包含.这个字符,那该怎么办呢?
这时需要用到转义匹配,实例如下:
import re content = '(百度)www.baidu.com'
result = re.match(r'\(百度\)www\.baidu\.com', content) print(result)
当在目标字符串中遇到用作正则匹配模式的特殊字符时,在此字符前面加反斜线\转义一下即可
例如.就可以用来匹配.,运行结果如下:
<re.Match object; span=(0, 17), match='(百度)www.baidu.com'>
可以看到,这里成功匹配到了原字符串。
📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗
相关文章:
正则表达式(2)
文章目录 专栏导读1、贪婪与非贪婪2、转义匹配 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程师精…...
xv6源码分析 001
xv6源码分析 001 我们先看看xv6这个项目的基本结构(只看代码部分) 主要就是两个目录kernel 和 user。 user是一些用户程序,也就是我们平时在shell上面执行的命令,每执行一个命令就会创建一个新的用户进程来执行这个命令 在user目…...
JS代码小知识(个人向)
JS 对象转数组 let obj {0:"a",1:"b",length:2 //加上这个就能转了 }; console.log(Array.from(obj)); // ["a", "b"] 数组的拼接 let a ["a","b"] let b ["c","d"] let c [...a , …...
MC34119
这份文件是关于MC34119线性集成电路的产品规格说明书,由Unisonic Technologies Co., Ltd生产。MC34119是一款低功耗音频放大器IC,主要用于电话应用,如扬声器电话。以下是该文件的核心内容概要: 产品描述: MC34119是一款…...
RabbitMQ3.13.x之十_流过滤的内部结构设计与实现
RabbitMQ3.13.x之十_流过滤的内部结构设计与实现 文章目录 RabbitMQ3.13.x之十_流过滤的内部结构设计与实现1. 概念1. 消息发布2. 消息消费 2. 流的结构1. 在代理端进行过滤2. 客户端筛选3. JavaAPI示例4. 流过滤配置5. AMQP上的流过滤6. 总结 3. 相关链接 1. 概念 流过滤的思…...
Node爬虫:原理简介
在数字化时代,网络爬虫作为一种自动化收集和分析网络数据的技术,得到了广泛的应用。Node.js,以其异步I/O模型和事件驱动的特性,成为实现高效爬虫的理想选择。然而,爬虫在收集数据时,往往面临着诸如反爬虫机…...
Python如何解决“滑动拼图”验证码(8)
前言 本文是该专栏的第67篇,后面会持续分享python爬虫干货知识,记得关注。 做过爬虫项目的同学,或多或少都会接触到一些需要解决验证码才能正常获取数据的平台。 在本专栏之前的文章中,笔者有详细介绍通过python来解决多种“验证码”(点选验证,图文验证,滑块验证,滑块…...
MongoDB 启动异常
Failed to start up WiredTiger under any compatibility version. 解决方案: 删除WiredTiger.lock 和 mongod.lock两个文件,在重新启动。回重新生成新的文件。...
mysql 常见数据处理 dml
学习完,mysql正则表达式查询,把常见的数据处理,做一个汇总,便于查看。 数据操纵语言(Data Manipulation Language, DML)。 1,新增数据: 1,单个插入: insert…...
课时86:流程控制_函数基础_函数退出
2.1.2 函数退出 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 我们可以将函数代码块,看成shell脚本内部的小型脚本,所以说函数代码块也会有执行状态返回值。对于函数来说,它通常支持两种种状态返回…...
【Python】无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案
【Python】无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案 大家好 我是寸铁👊 总结了一篇【Python】无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案✨ 喜欢的小伙伴可以点点关注 💝 前言 今天寸铁…...
9(10)-1(2)-CSS 布局模型+CSS 浮动
个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 一、CSS 布局模型1 流动模型(标准流) 二、CSS 浮动1 浮…...
RISC-V GNU Toolchain 工具链安装问题解决(含 stdio.h 问题解决)
我的安装过程主要参照 riscv-collab/riscv-gnu-toolchain 的官方 Readme 和这位佬的博客:RSIC-V工具链介绍及其安装教程 - 风正豪 (大佬的博客写的非常详细,唯一不足就是 sudo make linux -jxx 是全部小写。) 工具链前前后后我装了…...
[C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
关于C版本帧差法可以参考博客 [C]OpenCV基于帧差法的运动检测-CSDN博客https://blog.csdn.net/FL1768317420/article/details/137397811?spm1001.2014.3001.5501 我们将参考C版本转成opencvsharp版本。 帧差法,也叫做帧间差分法,这里引用百度百科上的…...
Android Studio学习8——点击事件
在xml代码中绑定 在java代码中绑定 弹出一个toast 随机,数组...
微软detours代码借鉴点备注
comeasy 借鉴点1 Loadlibray的时间选择 注入库wrotei.dll,为了获取istream的接口,需要loadlibrary,但是在dllmain中是不建议这样做的。因此,动态库在dllmain的时候直接挂载了comeasy.exe的入口 //获取入口 TrueEntryPoint (i…...
【c++】类和对象(七)
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章来到类和对象的最后一部分 目录 1.static成员1.1特性 2.友元2.1引入:<<和>>的重载2.2友元函数2.3友元类 3.内部类4.匿名对象5.拷…...
oracle pdb从12.1迁移到19.20
oracle pdb从12.1迁移到19.20 1 unplug (12c的环境执行) SQL> alter pluggable database VINCENT_TEST close immediate; SQL> alter pluggable database VINCENT_TEST unplug into /u01/backup/temp_20240401/VINCENT_TEST.xml;2 plug …...
[Python GUI PyQt] PyQt5快速入门
PyQt5快速入门 PyQt5的快速入门0. 写在前面1. 思维导图2. 第一个PyQt5的应用程序3. PyQt5的常用基本控件和布局3.1 PyQt5的常用基本控件3.1.1 按钮控件 QPushButton3.1.2 文本标签控件 QLabel3.1.3 单行输入框控件 QLineEdit3.1.4 A Quick Widgets Demo 3.2 PyQt5的常用基本控件…...
大模型微调实战:用百元级GPU打造专属AI助手
测试工程师的AI困局与破局在软件测试领域,我们每天都在与各种文本打交道——测试用例、缺陷报告、自动化脚本、需求文档、评审记录。大语言模型(LLM)的爆发让我们看到了提效的曙光,但很快就会发现,通用模型对测试业务的…...
嵌入式开发中CHM文件的应用与优化
1. CHM文件在嵌入式开发中的核心价值CHM(Compiled HTML Help)作为微软推出的编译型帮助文档格式,在嵌入式开发领域已经服役超过20年。这种将HTML文档、索引和搜索功能打包成单一文件的格式,特别适合Keil MDK这类嵌入式开发环境的技…...
云代理商:Hermes Agent如何通过技能沉淀降低长期算力消耗
在 AI 智能体规模化落地的今天,算力成本高、重复推理多、长期运行效率衰减,已成为企业和开发者的核心痛点。传统 AI 智能体每处理一次相似任务,都要从零开始推理、反复调用工具,大量算力浪费在重复劳动中,长期使用成本…...
OmenSuperHub终极指南:免费解锁惠普OMEN游戏本隐藏性能的完整教程
OmenSuperHub终极指南:免费解锁惠普OMEN游戏本隐藏性能的完整教程 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普…...
青海黑独山|人间极致灰度,藏着西北水墨秘境
沿着青海省海西蒙古族藏族自治州冷湖镇西南方向行驶,一片被灰黑色山体包裹的荒原逐渐展开在视野中。这便是黑独山,一处以极简色彩和奇特地形著称的自然景观。不同于常见丹霞地貌的绚烂或雅丹地貌的雄浑,黑独山的主体由灰黑色砂石、岩层与少量…...
字节跳动多举措重塑短剧行业:15亿扶持、分账透明,出海与收缩并行
恐慌的来源,以及字节的导向今年年初,“红果取消保底”消息在从业者圈子发酵,“短剧演员无戏可拍”话题登上微博热搜,阅读量破亿,行业恐慌蔓延。恐慌源于两方面:一是红果从2026年1月起收缩普惠保底ÿ…...
渗透测试之信息收集:这些技巧决定了渗透成败
渗透测试之信息收集:这些技巧决定了渗透成败作者:浅木先生前言 做渗透测试久了,你会越来越认同一个观点:信息收集的质量直接决定渗透测试的成败。 同样的目标URL,不同人扫出来的结果完全不同——有人只能扫出后台登录页…...
初创团队如何利用Taotoken管理多模型API成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何利用Taotoken管理多模型API成本 对于初创团队而言,在快速迭代产品、集成多个大语言模型以增强功能时&…...
从RRM到RIC:手把手拆解5G O-RAN智能控制器如何“接管”你的基站
从RRM到RIC:5G O-RAN智能控制器的技术演进与实战解析 在5G网络架构的演进浪潮中,O-RAN联盟提出的开放无线接入网理念正在重塑传统基站的控制方式。本文将带您深入探索无线资源管理(RRM)如何进化为近实时智能控制器(Nea…...
收藏!2026大厂AI招聘火爆:日薪5000抢博士,普通岗简历石沉大海?小白程序员必看生存指南
2026年大厂招聘季AI岗位需求暴涨215%,字节日薪5000抢清北博士,阿里AI岗占offer六成。AI核心岗位年薪可达百万,供需比仅0.15。非AI岗位受冲击,但AIGC产品经理、AI运营等潜力岗位升温。求职者需注重顶会论文、开源贡献等加分项&…...
