正则表达式之分组+正/反向肯定/否定预查

python 正则表达式—分组的用法 在正则表达式中,我们有时会见到类似这样的写法"(?!\d+).+?..*(?<!py(?<!py(?<!py)",本篇就简单介绍一下正则表达式的分组。 分组大概有这么几种用法 1.(?P<name>pattern)命名分组 2.(?=pattern)前向肯定 3.(?!pattern)前向否定 4.(?<=pattern)后向肯定 5.(?<!pattern)后向否定 这几种用法可随意搭配使用。 1.首先介绍一下命名分组 命名分组就是给匹配的内容起一个别名。例如下面 阅读详情

正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(?<!pattern)

(?:pattern)

()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推

(?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来

import re
a = "123abc456ww"
pattern = "([0-9]*)([a-z]*)([0-9]*)"
print(re.search(pattern,a).group(0,1,2,3)) //会打印 123abc456  123  abc  456

pattern = "(?:[0-9]*)([a-z]*)([0-9]*)"
print(re.search(pattern,a).group(0,1,2)) //会输出 123abc456  abc  456

可以看到 (?:[0-9]) 匹配的第一个 [0-9] 没有保存下来,即没有保存匹配到的“123”,而([0-9]*)则保存了下来。

python中group(0)返回匹配到的整体

(?:pattern)在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如,‘industr(?:y|ies)’ 就是一个比 ‘industry|industries’ 更简略的表达式。因为我们单独存储下 “y” 或者 “ies” 没有什么意义

a = "British industry"
pattern = "industr(?:y|ies)"
print(re.search(pattern,a).group(0))  //会打印  industry
# group(1)会报错,因为没有保存捕获到的“y”

pattern = "industr(y|ies)"
print(re.search(pattern,a).group(0, 1)) //会打印  industry  y

(?=pattern)

正向肯定预查(look ahead positive assert),匹配pattern前面的位置。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

简单说,以 xxx(?=pattern)为例,就是捕获以pattern结尾的内容xxx

例如,“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?!pattern)

正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

简单说,以 xxx(?!pattern)为例,就是捕获不以pattern结尾的内容xxx

例如"Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?<=pattern)

反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。

简单说,以(?<=pattern)xxx为例,就是捕获以pattern开头的内容xxx。

例如,"(?<=95|98|NT|2000)Windows“能匹配”2000Windows“中的”Windows",但不能匹配"3.1Windows“中的”Windows"。

(?<!pattern)

简单说,以(?<!pattern)xxx为例,就是捕获不以pattern开头的内容xxx。

反向否定预查,与正向否定预查类似,只是方向相反。例如"(?<!95|98|NT|2000)windows“能匹配”3.1Windows“中的”Windows",但不能匹配"2000Windows“中的”Windows"。

解锁Cherry Studio高阶玩法:用MCP实现自动化测试与数据爬取 本文深入探讨了如何利用MCP协议与Cherry Studio结合,实现自动化测试与数据爬取的高阶应用。通过Playwright等工具的MCP集成方案,详细解析了自动化测试流水线构建和智能爬虫系统开发的关键技术,显著提升工程效率和系统适应性。 阅读详情

相关推荐

unity | 动画模块之滚动选项框

动画模块之滚动选项框

菌菌兹的博客 2074

正则表达式高级用法: 分组

正则表达式高级用法: 分组分组的使用场景分组的使用方法捕获组分组的使用实例javascript 获取分组内容java 获取分组内容小结 分组的使用场景 在书写正则表达式时,通常情况下,我们有两种场景会使用到分组。 一是:对一个子表达式进行重复;二是:想要获取到子表达式匹配到的内容。 对子表达式进行重复 如果需要重复单个字符,直接在字符后面加上限定符即可,例如 a+ 表示匹配1个或一个以上的a,a?表示匹配0个或1个a。 但是我们如果要对多个字符进行重复的话,就需要用到 分组 。 比如:(ab){3} 表

老王的专栏 1万+

如何在高版本的ubuntu系统里安装gcc4.1.2

1、下载安装包,一共五个http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-4.1/,根据计算机系统位数   进行下载,64位下载amd64结尾的。开头分别是cpp-4.1_4.1.2、g++-4.1_4.1.2、gcc-4.1-base_4.1.2、gcc-     4.1_4.1.2、libstdc++6-4.1 2、使用sudo d

lsr_fighting的博客 1929

正则表达式(分组、零宽断言)

step2:再根据pattern2位置,判断pettern1匹配结果,若pattern1匹配成功(正向:断言成功,负向:断言失败),反之亦然。一种特殊形式的正则表达式,匹配时不消耗原始字符,只判断pattern1是否匹配成功,如同:^ $ \b等边界匹配一样。step2:再判断pettern1匹配结果,若pattern1匹配成功(正向:断言成功,负向:断言失败),反之亦然。step3:若断言成功,返回step1匹配结果,反之,返回结果为:None。:pattern)。:只引用匹配结果,而不是引用匹配模式。

汝飞@大模型 的博客 3230

【WILEY】从Revision到Online:逐层拆解投稿状态更新与关键文件提交实战

本文详细解析了学术论文从返修到在线发表的全过程,重点拆解了投稿系统状态更新背后的含义与应对策略。文章提供了返修稿与回复信的准备技巧、关键补充文件(如图文摘要)的提交要点,并分享了校对校样与处理出版协议的实战经验,帮助作者高效、专业地完成发表流程。

weixin_29209805的博客 712

西门子 G120 变频器报文

G120报文

mmxxoo_xxmmp的博客 8067

正则表达式分组、引用和断言

这几日看权威指南,对正则里的分组、引用和断言有了更深的理解,特地整理一下加深印象。 为了详细地解释,首先将权威指南第6版上相关描述的原文贴出来,重点用红色标识。 字符含义 (......) Grouping. Group items into a single unit that can be used with *, +, ?, | , and so on. Al...

weixin_30477797的博客 852

银河麒麟V10 SP1忘记密码?3分钟搞定单用户模式密码重置(附详细截图)

本文详细介绍了银河麒麟V10 SP1操作系统忘记登录密码后的应急恢复方法。核心是通过GRUB引导菜单进入单用户模式,无需密码即可获得root权限,从而快速重置用户密码。文章提供了从捕捉GRUB界面、编辑启动参数到执行密码修改命令的完整步骤图解与常见问题解决方案,帮助用户在几分钟内恢复系统访问。

w3x4y的博客 913

正则表达式的正向预查和反向预查: ()、(?:)、(?=)、(?!)、(?<=)、(?<!)

(?:pattern) 非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。 (?=pattern) 非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。.........

u014644574的博客 3235

夸克缓存视频合并小工具

原理 使用windows的命令行的copy命令来合并 copy /b 0+1+2+3 new.ts 分析缓存目录结构,发现都是一个m3u8文件带一个同名文件夹 所以分析m3u8并把原来的路径换成这个缓存文件夹路径并按顺序合并即可。 其中碰到的难点是Qprocess在windows不好使,索性直接存成.bat批处理文件再执行 还有就是中文问题,具体在代码里都说了。 代码 (环境Qt5.7.0) 这是mainwindow.h #ifndef MAINWINDOW_H #defin.

natural_Caduceus 1万+

【机器人学】常用的小车底盘运动学模型推导(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对小车底盘运动学模型介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容对于小车的分析,仅仅考虑XY轴的线速度和Z轴的角速度,不考虑和横滚和俯仰的速度,【防盗标记–盒子君hzj】也不考虑Z轴的高度变化【即:车底盘的运动可以用三个独立变量来描述:x轴平动、y轴平动、yaw轴转动】

qq_35635374的博客 1930

正则表达式中小括号与正向反向预查

小括号()在正则表达式的应用中代表“捕获分组”什么是捕获分组呢,在Python中正则匹配得出的结果中,会将正则表达式里()中匹配的结果单独存放在一个数组中,第一个()里的结果放在数组的第一位,第二个()里匹配的结果放在数组的第二位,以此类推。...

Lavi的专栏 2149

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 202

js复习之正则表达式正向肯定与否定预查询

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

qq_27577113的博客 1214

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

正则表达式中的捕获非捕获匹配

正则表达式中的非捕获匹配(?:pattern)(?=pattern)(?!pattern)(?<=pattern)(?<!pattern) 在正则表达之使用中,经常会用到捕获匹配,即使用()进行匹配的分组会被保存在当前的执行环境变量中,从左到右以分组的括号为标志,依次编号为1,2,…,在需要时可以直接使用\1,\2…来进行引用.而在一些匹配场景中其实保存这些变量并没有任何的意义,这时候就需要用到非捕获匹配. (?:pattern) (?"pattern)表示一个非捕获分组,和捕获分组比起来,非捕

王二东的博客 2940

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

正则表达式 - 预查模式详解(?:)、(?=)、(?!)、(?<=)、(?<!)区别

非捕获单元格式描述示例说明?:(?:Pattern)非捕获元A(?=B|C)常用于(?:a|b)选择中,匹配AB或AC?=(?=Pattern)正向肯定预查(零宽正向先行断言)A(?=B|C)匹配以B、C结尾的A?!(?=Pattern)正向否定预查(零宽负向先行断言)A(?!B|C)匹配不以B、C结尾的A?

qq_37978224的博客 4354

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

正则表达式中 前瞻,后顾,负前瞻,负后顾等整理

文章目录正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(?<!pattern)(?:pattern)(?=pattern)(?!pattern)(?<=pattern)(?<!pattern) 正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(...

添的博客 1618

js正则匹配获取分组和正向反向的区别

js正则匹配获取分组和正向反向的区别正则学习:http://www.zjmainstay.cn/regexp-oneregex101网站:https://regex101.com/可视化正则:https://jex.im/regulex/

动感超人的博客 698

python中的pattern什么意思_正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(?<!pattern)...

(?:pattern)()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推(?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来importrea= "123abc456ww"pattern= "([0-9]*)([a-z]*)([0-9]*)"print(re.search(patter...

weixin_39955142的博客 4624

javascript正则之正向预查和反向预查

javascript正则之正向预查和反向预查

m0_55980258的博客 1043

正则表达式中(?:pattern)、(?!pattern)、(?<=pattern)和(?<!pattern)

(?:pattern)   ()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推   (?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来 import re a = "123abc456ww" pattern = "([0-9]*)([a-z]*)([0-9]*)" print(re.search(pattern,a).group(0,1,2,3)) pattern = "(?:[0-9]*)

行者无疆的博客 1161

正则表达式中匹配开头关键词和结尾关键词

主要用到的功能(?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(?<!pattern) 1、(?:pattern) ()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推 (?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来 import re a = "123abc456ww" pattern = "([0-9]*)([a-z]*)([

进击的豌豆的博客 6983

高级正则用法?预查

详解正则表达式预查?:,?=,?!,?>= 工欲善其事必先利其器,正则表达式无疑是一个非常强大的工具,从txt,excel,word还有众多编辑器,还有各种开发语言都有它的踪影. 下面就说下正则表达式较为高级的预查用法 包含4个关键字符顺序:?<=! (=!只能同时出现一个) ? 预查校验的标志 < 表示方向 存在为反向,无则正向 ! 否定 = 肯定 ...

qq_18887855的博客 261

正则表达式中问号(?)的用法详解

正则表达式中“?”的用法大概有以下几种 1、直接跟随在子表达式后面 这种方式是最常用的用法,具体表示匹配前面的一次或者0次,类似于{0,1},如:abc(d)?可匹配abc和abcd 2、非贪婪匹配 关于贪婪和非贪婪,贪婪匹配的意思是,在同一个匹配项中,尽量匹配更多所搜索的字符,非贪婪则相反。正则匹配的默认模式是贪婪模式,当?号跟在如下限制符后面时,使用非贪婪模式(*,+,?,{n},{n...

小敏哥的专栏 7万+

从正则的含义到正反向预查和捕获

正则构成:元字符和修饰符正则含义:正则是专门用来处理字符串的一种技术 。 这个处理包含两方面的: 1.正则匹配,判断某一个字符串是否符合规则 2.正则捕获,把符合规则的字符串捕获到 创造正则的两种方式:字面量和构造函数 let obj={}//字面量 let obj2=new Object()//构造函数 正则匹配 let obj={qq:'hello'} let reg=/jchckhello/ let t_str=JSON.stringify(obj); //使用对象方法把对象转为..

m0_61437615的博客 354

正则表达式的几个特殊匹配

正则表达式 (?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(?<!pattern)

了缺的专栏 270
上一篇: PostGres常用sql锦集(持续更新中,内容会越来越多)
下一篇: 从文件中读取,并归并排序
lhever_
博客等级 码龄14年 213粉丝 130原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值