RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!
RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?! 有好多种称呼
(?<= , (?= , (?<! , (?! 有好多种称呼 ,

我称为: 左限定, 右限定, 左否定, 右否定
(?<=左限定)(?=右限定)(?<!左否定)(?!右限定)

再提炼
?<=?=?<!?!

其它的称呼
正则表达式预查寻分为 4 种:
- 正向肯定预查:
(?=pattern)(?=pattern) - 正向否定预查:
(?!pattern)(?!pattern) - 反向肯定预查:
(?<=pattern)(?<=pattern) - 反向否定预查:
(?<!pattern)(?<!pattern)
比如:
- 匹配
babcab中的第二个b, 可以用(?<=a)b(?=c), 含义是:左a右c的b (?<!a)b(?!c)的含义是: 左非a右非c的b, 它会匹配到第一个b
或者称为:
- 正向零宽度先行断言:
(?=exp)(?=exp) - 正向零宽度回顾后断言:
(?!exp)(?!exp) - 负向零宽度先行断言:
(?<=exp)(?<=exp) - 负向零宽度回顾后断言:
(?<!exp)(?<!exp)
或者称为:
- 肯定性:匹配
regex - 否定性:不匹配
regex - 前瞻:向前(右、正向)看(预查)
- 后顾:向后(左、反向)看(预查)
- 肯定性前瞻:先看看前方(右边)是否匹配
regex,但不向前走 - 否定性前瞻:先看看前方(右边)是否不匹配
regex,但不向前走 - 肯定性后顾:回头看后方(左边)是否匹配
regex - 否定性后顾:回头看后方(左边)是否不匹配
regex
或者称为:
菜鸟教程-正则表达式的先行断言(lookahead)和后行断言(lookbehind)
-
(?=pattern)零宽正向先行断言(zero-width positive lookahead assertion) -
(?!pattern)零宽负向先行断言(zero-width negative lookahead assertion) -
(?<=pattern)零宽正向后行断言(zero-width positive lookbehind assertion) -
(?<!pattern)零宽负向后行断言(zero-width negative lookbehind assertion)
菜鸟教程-正则表达式 - 元字符
`
| 字符 | 描述 |
|---|---|
| (?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 |
| (?!pattern) | 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 |
| (?<=pattern) | 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。 例如," (?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。 |
| (?<!pattern) | 反向否定预查,与正向否定预查类似,只是方向相反。 例如" (?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。 |
来自 文心一言 4.0
在正则表达式中,如果你想限定一个模式(pattern)的左右相邻内容,你可以使用断言(assertions)。常见的断言有:
-
正向前瞻断言(Positive Lookahead) -
(?=pattern)- 表示之后的字符序列需要匹配给定的模式,但该模式本身不会成为匹配结果的一部分。
-
负向前瞻断言(Negative Lookahead) -
(?!pattern)- 表示之后的字符序列不能匹配给定的模式。
-
正向后顾断言(Positive Lookbehind) -
(?<=pattern)- 表示之前的字符序列需要匹配给定的模式,但该模式本身不会成为匹配结果的一部分。
-
负向后顾断言(Negative Lookbehind) -
(?<!pattern)- 表示之前的字符序列不能匹配给定的模式。
请注意,不是所有的正则表达式引擎都支持后顾断言,尤其是负向后顾断言。
下面是一些例子:
-
匹配被"abc"和"def"包围的字符串:
(?<=abc).*?(?=def)在这个例子中,
.*?是一个懒惰量词,它会匹配尽可能少的字符直到遇到def。 -
匹配不被数字包围的单词:
\b(?<![0-9])[a-zA-Z]+\b(?![0-9])这里使用了单词边界
\b,负向后顾断言(?<![0-9])和负向前瞻断言(?![0-9])来确保单词的前后都不是数字。 -
匹配被引号包围的文本(不包含引号本身):
(?<=")[^"]*(?=")这个表达式使用了正向后顾断言
(?<=")和正向前瞻断言(?=")来匹配引号之间的文本。[^"]*匹配除引号外的任意字符(0个或多个)。
请记住,正则表达式中特殊字符和元字符通常需要转义(例如,在字符串中使用 \\ 代替 \,使用 \" 代替 ")。这取决于你使用的编程语言和上下文。
最后,由于正则表达式的复杂性和多样性,建议在实际应用中仔细测试你的表达式以确保它按照预期工作。
来自 文心一言 3.5
正则表达式预查寻(也称为预查或断言)是一种特殊的匹配技术,用于在匹配位置之前或之后执行条件判断,而不会真正消耗字符串中的字符。预查寻可以用来限定左右相邻的内容,确保它们符合特定的模式。
预查寻包括正向预查和反向预查,每种预查又可以分为肯定预查和否定预查。
-
正向预查:
- 正向肯定预查:语法为
(?=pattern)。它会匹配任何位置,该位置后面紧跟着符合指定模式的字符串。但是,该模式本身不会被包括在匹配结果中。例如,表达式Windows(?=95|98|NT)会匹配任何以“Windows”开始,后面紧跟着“95”、“98”或“NT”的字符串。但匹配结果只包括“Windows”,不包括后面的操作系统版本。 - 正向否定预查:语法为
(?!pattern)。它会匹配任何位置,该位置后面不能紧跟着符合指定模式的字符串。例如,表达式\d+(?!\.)会匹配任何不以小数点结尾的数字序列。
- 正向肯定预查:语法为
-
反向预查:
- 反向肯定预查:语法为
(?<=pattern)。它会匹配任何位置,该位置前面紧挨着符合指定模式的字符串。但是,该模式本身不会被包括在匹配结果中。例如,表达式(?<=19|20)\d{2}会匹配任何以“19”或“20”开始的两位数字,但匹配结果不包括前面的“19”或“20”。 - 反向否定预查:语法为
(?<!pattern)。它会匹配任何位置,该位置前面不能紧挨着符合指定模式的字符串。请注意,这种形式的反向否定预查在大多数正则表达式引擎中不受支持。
- 反向肯定预查:语法为
预查寻在正则表达式中非常有用,特别是在处理复杂的模式匹配和验证时。通过使用预查寻,你可以更精确地控制匹配的位置,确保左右相邻的内容符合特定的要求。
问 C知道 “如何用正则表达式限定左右相邻内容”
使用正则表达式可以通过限定左右相邻内容来配特定的模式。以下是一种常用的方法:
import re# 使用正则表达式限定左右相邻内容
pattern = r'(?<=左边的内容)要匹配的内容(?=右边的内容)'# 在文本中搜索匹配的内容
text = "左边的内容要匹配的内容右边的内容"
matches = re.findall(pattern, text)# 输出匹配的结果
for match in matches:print(match)
在上述代码中,我们使用了正则表达式的两个特殊符号来限定左右相邻内容:
(?<=左边的内容):表示要匹配的内容的左边必须是指定的左边内容。(?=右边的内容):表示要匹配的内容的右边必须是指定的右边内容。
你可以根据实际情况修改左边的内容、要匹配的内容和右边的内容来适应你的需求。
问 C知道 “正则表达式预查寻”
正则表达式预查是一种特殊的正则表达式语法,用于在匹配过程中进行前瞻或后顾判断,而不会消耗字符。预查可以帮助我们在匹配时确定某些条件是否满足,从而更精确地匹配目标字符串。
正则表达式预查分为正向预查和反向预查两种类型。正向预查用于匹配在某个位置之后的内容,而反向预查则用于匹配在某个位置之前的内容。
下面是两个示例来演示正则表达式预查的使用:
- 正向预查示例:匹配后面跟着数字的单词
import retext = "apple123 orange456 banana789"
pattern = r"\w+(?=\d)" # 匹配后面跟着数字的单词
result = re.findall(pattern, text)
print(result) # 输出:['apple', 'orange', 'banana']
- 反向预查示例:匹配前面跟着数字的单词
import retext = "123apple 456orange 789banana"
pattern = r"(?<=\d)\w+" # 匹配前面跟着数字的单词
result = re.findall(pattern, text)
print(result) # 输出:['apple', 'orange', 'banana']
问 C知道 “正则表达式断言”
正则表达式断言是一种用于匹配字符串中特定位置的模式。它们不会消耗输入字符串,只是检查当前位置是否满足某些条件。正则表达式断言分为前行断言和后行断言。
-
前行断言(Positive Lookahead Assertion):用于匹配当前位置后面的内容是否满足某个条件。它使用语法
(?=pattern),其中pattern是一个正则表达式。例如,要匹配字符串中包含"re"的单词,但不包括"regex"和"regular",可以使用前行断言re(?=gex|gular)。 -
后行断言(Positive Lookbehind Assertion):用于匹配当前位置前面的内容是否满足某个条件。它使用语法
(?<=pattern),其中pattern是一个定长的正则表达式。后行断言在Perl和Python中有一些限制,它们只能使用定长的表达式,不能使用*、+、?等元字符。例如,要匹配除"regex"和"regular"之外的"re",可以使用后行断言(?<!g)re。
需要注意的是,不同的编程语言对正则表达式断言的支持程度有所不同。Perl和Python对后行断言有一些限制,Java不支持*和+字符,而JavaScript则不支持后行断言。
可能不正确, 经验证, JavaScript是支持(?<=a)b(?=c)这样的的
其它待验证
相关文章:
RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!
RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?< , (? , (?<! , (?! 有好多种称呼 (?< , (? , (?<! , (?! 有好多种称呼 , 我称为: 左限定, 右限定, 左否定, 右否定 (?<左限定) (?右限定)(?<!左否定) (?!右限定) 再…...
相机图像质量研究(30)常见问题总结:图像处理对成像的影响--重影
系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…...
问题记录——c++ sort 函数 和 严格弱序比较
引出 看下面这段cmp函数的定义 //按照vector第一个元素升序排序 static bool cmp(const vector<int>& a, const vector<int>& b){return a[0] < b[0]; }int eraseOverlapIntervals(vector<vector<int>>& intervals) {//按区间左端排序…...
《Go 简易速速上手小册》第9章:数据库交互(2024 最新版)
文章目录 9.1 连接数据库 - Go 语言的海底宝藏之门9.1.1 基础知识讲解安装数据库驱动数据库连接 9.1.2 重点案例:用户信息管理系统准备数据库Go 代码实现连接数据库添加新用户查询用户信息用户登录验证主函数 9.1.3 拓展案例 1:批量添加用户准备数据库Go…...
redis的hash数据结构底层简记
hash:k和v都是string的hash表。 HSET(设置集合数据,4.0之前只能设置1个,之后可以设置多个),HSETNX(若k不存在则设置对应v),HDEL(删除指定kv,可以一次删除多个)…...
清除Django的管理员admin站点中“Recent Actions“最近活动面板上的所有信息
清除Django的管理员admin站点中"Recent Actions"最近活动面板上的所有信息 本文主要介绍了如何清除Django的管理员admin站点中"Recent Actions"最近活动面板上的所有信息 操作步骤如下 进入Django项目目录中运行代python manage.py shell进入Django shell…...
【JVM篇】ThreadLocal中为什么要使用弱引用
文章目录 🍔ThreadLocal中为什么要使用弱引用⭐总结 🍔ThreadLocal中为什么要使用弱引用 ThreadLocal可以在线程中存放线程的本地变量,保证数据的线程安全 ThreadLocal是这样子保存对象的: 在每个线程中,存放了一个…...
Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试
前言 在2022年,人工智能创作内容(AIGC)成为了AI领域的热门话题之一。在ChatGPT问世之前,AI绘画以其独特的创意和便捷的创作工具迅速走红,引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表…...
【JavaEE】_线程与多线程的创建
目录 1. 线程的概念 2. 创建与使用多线程 2.1 方式1:继承Thread类 2.2 方式2: 实现Runnable接口 2.3 以上两种创建线程方式的对比 3. 多线程的优势-增加运行速度 1. 线程的概念 进程的存在是由于系统的多任务执行需求,这也要求程序员进…...
【前端工程化面试题】如何优化提高 webpack 的构建速度
使用最新版本的 Webpack 和相关插件: 每个新版本的 Webpack 都会带来性能方面的改进和优化,因此始终确保你在使用最新版本。同时,更新你的相关插件也是同样重要的。 使用DllPlugin动态链接库: 使用DllPlugin和DllReferencePlugin来将第三方库的代码进行…...
免费chatgpt使用
基本功能如下: https://go.aigcplus.cc/auth/register?inviteCode3HCULH2UD...
OpenCV识别人脸案例实战
使用级联函数 基本流程 函数介绍 在OpenCV中,人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数,它可以检测出图片中所有的人脸。该函数由分类器对象调用,其语法格式为: objects cv2.CascadeClassifier.detectMul…...
VOSK——离线语音库
文章目录 识别函数调用添加自定义热词表1. SetWords2. SetLatticeWords3. SetPartialWords使用示例注意1. SetMaxAlternatives2. SetNLSML3. SetSpkModel4. SetGrammar使用示例注意SetLogLevel示例用法注意事项 识别函数调用 在使用Vosk库进行语音识别时,PartialRe…...
ELAdmin 隐藏添加编辑按钮
使用场景 做了一个监控模块,数据都是定时生成的,所以不需要手动添加和编辑功能。 顶部不显示 可以使用 true 或者 false 控制现实隐藏 created() {this.crud.optShow {add: false,edit: false,del: true,download: true,reset: true}},如果没有 crea…...
浅谈Websocket
由于 http 存在⼀个明显的弊端(消息只能有客户端推送到服务器端,⽽服务器端不能主动推送到客户端),导致如果服务器如果有连续的变化,这时只能使⽤轮询,⽽轮询效率过低,并不适合。于是 WebSocket 被发明出来 WebSocket 是⼀种在 Web 应⽤程序中实现双向通信的协议。与传…...
JavaScript闭包详细介绍
文章目录 什么是闭包优点:变量持久化:封装私有变量:模块化:函数工厂: 缺点:内存占用:调试困难:过度使用导致性能下降: 什么是闭包 闭包是指有权访问另一个函数作用域中的…...
pytorch神经网络入门代码
import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms# 定义神经网络结构 class SimpleNN(nn.Module):def __init__(self, input_size, hidden_size, num_classes):super(SimpleNN, self).__init_…...
代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
860.柠檬水找零 链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 细节: 1. 首先根据题意就是只有5.的成本,然后就开始找钱,找钱也是10.和5. 2. 直接根据10 和 5 进行变量定义,然后去循环…...
Ditto:提升剪贴板体验的宝藏软件(复制粘贴效率翻倍、文本处理好助手)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是Ditto?二、下载安装三、如…...
【自然语言处理-工具篇】spaCy<2>--模型的使用
前言 之前已经介绍了spaCy的安装,接下来我们要通过下载和加载模型去开始使用spaCy。 下载模型 经过训练的 spaCy 管道可以作为 Python 包安装。这意味着它们是应用程序的一个组件,就像任何其他模块一样。可以使用 spaCy download的命令安装模型,也可以通过将 pip 指向路径或…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
