RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!

news2025/2/24 6:14:47

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

(?<= , (?= , (?<! , (?! 有好多种称呼 ,

在这里插入图片描述


我称为: 左限定, 右限定, 左否定, 右否定

  • (?<=左限定)    (?=右限定)
  • (?<!左否定)    (?!右限定)

在这里插入图片描述

再提炼

  • ?<=    ?=
  • ?<!    ?!

在这里插入图片描述


其它的称呼

正则表达式预查寻分为 4 种:

  1. 正向肯定预查: (?=pattern) (?=pattern)
  2. 正向否定预查: (?!pattern) (?!pattern)
  3. 反向肯定预查: (?<=pattern) (?<=pattern)
  4. 反向否定预查: (?<!pattern) (?<!pattern)

比如:

  • 匹配 babcab 中的第二个b, 可以用 (?<=a)b(?=c), 含义是:左a右c的b
  • (?<!a)b(?!c)的含义是: 左非a右非c的b, 它会匹配到第一个b

或者称为:

  1. 正向零宽度先行断言: (?=exp) (?=exp)
  2. 正向零宽度回顾后断言: (?!exp) (?!exp)
  3. 负向零宽度先行断言: (?<=exp) (?<=exp)
  4. 负向零宽度回顾后断言: (?<!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的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

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

(?!pattern)

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

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

(?<=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)。常见的断言有:

  1. 正向前瞻断言(Positive Lookahead) - (?=pattern)

    • 表示之后的字符序列需要匹配给定的模式,但该模式本身不会成为匹配结果的一部分。
  2. 负向前瞻断言(Negative Lookahead) - (?!pattern)

    • 表示之后的字符序列不能匹配给定的模式。
  3. 正向后顾断言(Positive Lookbehind) - (?<=pattern)

    • 表示之前的字符序列需要匹配给定的模式,但该模式本身不会成为匹配结果的一部分。
  4. 负向后顾断言(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

正则表达式预查寻(也称为预查或断言)是一种特殊的匹配技术,用于在匹配位置之前或之后执行条件判断,而不会真正消耗字符串中的字符。预查寻可以用来限定左右相邻的内容,确保它们符合特定的模式。

预查寻包括正向预查和反向预查,每种预查又可以分为肯定预查和否定预查。

  1. 正向预查:

    • 正向肯定预查:语法为 (?=pattern)。它会匹配任何位置,该位置后面紧跟着符合指定模式的字符串。但是,该模式本身不会被包括在匹配结果中。例如,表达式 Windows(?=95|98|NT) 会匹配任何以“Windows”开始,后面紧跟着“95”、“98”或“NT”的字符串。但匹配结果只包括“Windows”,不包括后面的操作系统版本。
    • 正向否定预查:语法为 (?!pattern)。它会匹配任何位置,该位置后面不能紧跟着符合指定模式的字符串。例如,表达式 \d+(?!\.) 会匹配任何不以小数点结尾的数字序列。
  2. 反向预查:

    • 反向肯定预查:语法为 (?<=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知道 “正则表达式预查寻”

正则表达式预查是一种特殊的正则表达式语法,用于在匹配过程中进行前瞻或后顾判断,而不会消耗字符。预查可以帮助我们在匹配时确定某些条件是否满足,从而更精确地匹配目标字符串。

正则表达式预查分为正向预查和反向预查两种类型。正向预查用于匹配在某个位置之后的内容,而反向预查则用于匹配在某个位置之前的内容。

下面是两个示例来演示正则表达式预查的使用:

  1. 正向预查示例:匹配后面跟着数字的单词
import re

text = "apple123 orange456 banana789"
pattern = r"\w+(?=\d)"  # 匹配后面跟着数字的单词
result = re.findall(pattern, text)
print(result)  # 输出:['apple', 'orange', 'banana']
  1. 反向预查示例:匹配前面跟着数字的单词
import re

text = "123apple 456orange 789banana"
pattern = r"(?<=\d)\w+"  # 匹配前面跟着数字的单词
result = re.findall(pattern, text)
print(result)  # 输出:['apple', 'orange', 'banana']



问 C知道 “正则表达式断言”

正则表达式断言是一种用于匹配字符串中特定位置的模式。它们不会消耗输入字符串,只是检查当前位置是否满足某些条件。正则表达式断言分为前行断言和后行断言。

  1. 前行断言(Positive Lookahead Assertion):用于匹配当前位置后面的内容是否满足某个条件。它使用语法(?=pattern),其中pattern是一个正则表达式。例如,要匹配字符串中包含"re"的单词,但不包括"regex"和"regular",可以使用前行断言re(?=gex|gular)

  2. 后行断言(Positive Lookbehind Assertion):用于匹配当前位置前面的内容是否满足某个条件。它使用语法(?<=pattern),其中pattern是一个定长的正则表达式。后行断言在Perl和Python中有一些限制,它们只能使用定长的表达式,不能使用*+?等元字符。例如,要匹配除"regex"和"regular"之外的"re",可以使用后行断言(?<!g)re

需要注意的是,不同的编程语言对正则表达式断言的支持程度有所不同。Perl和Python对后行断言有一些限制,Java不支持*+字符,而JavaScript则不支持后行断言。

可能不正确, 经验证, JavaScript是支持(?<=a)b(?=c)这样的的
其它待验证







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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直播预告贴纸功能与直播商品预告功能设置基础

一.短视频预告贴纸功能 1.功能介绍 2.使用说明 设置预告贴纸入口 &#xff08;1&#xff09;拍摄视频时添加贴纸 &#xff08;2&#xff09;关播页去发布下一条短视频预告 &#xff08;3&#xff09;主播个人主页–直播动态 3.开播时间设置 4.开播提醒 5.用户端功能展示…

Chrome 关闭F12 网络选项下的大时间段图

把所有的按钮点了一遍&#xff0c;终于找到了 点开F12点右上的小齿轮&#xff0c;把概览取消勾选就可以了 英文的控制台中叫Overview

python-产品篇-游戏-成语填填乐

文章目录 准备代码效果 准备 无需其他文件&#xff0c;复制即用 代码 import random list["春暖花开","十字路口","千军万马","白手起家","张灯结彩","风和日丽","万里长城","人来人往",&…

RocketMQ(三):消息类型(普通、定时、顺序和事务消息)——备份

1 普通消息 普通消息为Apache RocketMQ最基础的消息&#xff0c;区别于有特性的顺序消息、定时/延时消息和事务消息。本节介绍普通消息的应用场景、功能原理、使用方法和使用建议。 1.1 应用场景 普通消息一般应用于微服务解耦、事件驱动、数据集成等场景&#xff0c;这些场景…

外汇110:外汇做空是什么意思?如何运作?一文读懂

外汇市场允许卖空&#xff0c;就像众多金融市场一样。但什么是卖空呢&#xff1f;如何外汇做空&#xff1f;在本文中&#xff0c;我们将讨论如何做空货币。什么是外汇做空&#xff1f; 外汇做空&#xff08;Short Selling&#xff09;是外汇市场上的一种投资方式。它指的是投资…

制作一个入耳式耳机壳需要用到哪些材料和工艺流程呢?

制作一个入耳式耳机壳需要用到以下材料和工艺流程&#xff1a; 材料&#xff1a; 耳机壳材料&#xff1a;常用的有PC/ABS塑料、金属、陶瓷、木质等。不同材料具有不同的特性&#xff0c;如塑料轻便耐用、金属质感好、陶瓷高档、木质自然等。耳塞材料&#xff1a;常用的有硅胶、…

Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建

对于 Mingw 的安装比较困难&#xff0c;国内的网无法正常在线下载组件&#xff0c; 需要手动下载 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 版本的软件包&#xff0c;添加环境变量&#xff0c;并将 mingw32-make.exe 名字改成 make.exe。 对于 OpenOCD&#xff0c;需要…

GPT4微信机器人部署,集成gpt4问答、midjourney以及新闻等联网功能,免费可添加机器人成为自己专属助理

GPT问答和midjourney作为AI届两大亮点&#xff0c;都各自有官方体验方式。 同时&#xff0c;也有很多大神搭建了各类软件、平台供用户体验使用。 但是如果同时将GPT问答和midjourney集合到日常最常使用的微信呢&#xff1f; 打造一个微信机器人&#xff0c;不仅自己可以随时…

【Linux】进程的初步认识(一)

进程的初步认识 基本概念描述进程task_struct-PCB的一种task_stuct内容分类 查看进程通过系统调用获取进程标识符 基本概念 要了解进程&#xff0c;首先我们要知道两点 我们可以同时启动多个程序&#xff0c;也就意味着我们可以将多个.exe文件加载到内存操作系统如何去管理这些…

kettle--JavaScript脚本日期使用

输入日期为20240216&#xff0c;运行如下代码&#xff0c;结果为true var reportdate parent_job.getVariable("v_reportdate"); var date_type parent_job.getVariable("v_date_type"); var reportdate_freportdate.substr(0,4) "/" report…

如何在亚马逊,美客多,阿里国际,速卖通上安全地进行自养号测评?

借鉴亚马逊等跨境电商市场的经验&#xff0c;我们建议选取具备以下特点的产品在平台上销售&#xff0c;以实现需求稳定、竞争较低、利润较高&#xff0c;同时规避法律纠纷和质检问题。首先&#xff0c;应选择体积小、重量轻、易于运输的商品&#xff0c;这有助于降低运输成本和…

Ant Design Card 组件展示图片

文章目录 Ant Design Card 组件展示图片理解card组件结构隐藏卡片内容区域 下拉时加载图片卡片加载更多代码 分页的方式加载图片列表【推荐】实现思路代码demo缩略图在card组件下发显示图片文件名卡片操作 分页 Ant Design Card 组件展示图片 官方文档&#xff1a; Card卡片组…

Leetcode-429.N叉树的层序遍历

题目&#xff1a; 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08;参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff…

电脑mp4格式视频打不开?别急,教你轻松解决问题

在数字化时代&#xff0c;MP4格式是广泛应用于视频存储和分享的一种常见格式。然而&#xff0c;有时候我们可能会遇到电脑mp4格式视频打不开的情况。无论您是经常处理视频的专业人士&#xff0c;还是普通用户在观看视频时遇到问题&#xff0c;接下来&#xff0c;让我们一同探索…

GPT-4助力我们突破思维定势

GPT-4在突破思维局限、激发灵感和促进知识交叉融合方面的作用不可小觑&#xff0c;它正逐渐成为一种有力的工具&#xff0c;助力各行业和研究领域的创新与发展。 GPT-4在突破传统思维模式、拓宽创新视野和促进跨学科知识融合方面扮演着越来越重要的角色&#xff1a; 突破思维…

解码成功:从8000万到110亿,鸭鸭羽绒如何练就100倍逆势增长奇迹?

鸭鸭羽绒100倍增长奇迹 在现今市场环境中&#xff0c;许多企业都面临着增长乏力的问题&#xff0c;仿佛陷入了无法突破的困境。然而&#xff0c;总有一些企业能够在这样的环境中独树一帜&#xff0c;表现出色。鸭鸭羽绒就是这样一个典型的例子。尽管整个经济环境并不理想&…

【RT-DETR有效改进】利用EMAttention加深网络深度提高模型特征提取能力(特征选择模块)

一、本文介绍 本文给大家带来的改进机制是EMAttention注意力机制,它的核心思想是,重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中的通道权重,并通过跨维度交互来捕获像素级…

CSS 故障的效果(仿抖音)

<template><!-- 创建一个视图容器,用于装载加载动画 --><view class="loader"><!-- 使用data-glitch属性存储原始文本内容,在CSS中通过attr()函数获取 --><view data-glitch="加载中..." class="glitch">加载中…

[力扣 Hot100]Day28 两数相加

题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都…

揭秘铷原子钟:北斗卫星系统的“心脏”

揭秘铷原子钟&#xff1a;北斗卫星系统的“心脏” 近日&#xff0c;中国科学院精密测量科学与技术创新研究院的梅刚华团队发布了一项重要成果。他们成功将铷原子钟的短期频率稳定度提高到了E-14&#xff08;即10的负14次方&#xff0c;相当于百万亿分之一&#xff09;的量级&a…