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

Python 正则表达式 (?=...) 和 (?<=...) 符号

Python 正则表达式

  • 引言
  • 正文
    • 示例1
    • 示例2
    • 示例3
    • 示例4

引言

今天遇到了一个比较棘手的问题,于是终于打算要对正则表达式中的 (?=...)(?<=...) 符号动手了。

正文

(?=...) 表示当 匹配时,匹配成功,但不消耗字符串中的任何字符。这个叫做 前视断言 (lookahead assertion)。比如, Isaac (?=Asimov) 将会匹配 Isaac ,仅当其后紧跟 Asimov

在 Python 正则表达式 (…) 符号 一文中,我们说明了为什么要使用 () 符号以及 ... 符号的含义。事实上,上述的 (?=...)(?<=...) 中的 ... 符号可以被替换为任意的符号,这里为了方便说明问题,我们将 ... 符号替换为 \t 符号。

示例1

import restr1 = 'abc\tdefghi\txyz'
print(re.search('(?=\t)', str1))
"""
result:
<re.Match object; span=(3, 3), match=''>
"""

可以看到,它匹配到了索引值为 3\t 字符,但是由于它是前视断言,即向前搜索,而我们的匹配项中 (?=\t) 之前并没有任何字符,因此什么也没有匹配到。

示例2

我们对示例 1 中的匹配内容稍作更改。

import restr1 = 'abc\tdefghi\txyz'
print(re.search('abc(?=\t)', str1))
"""
result:
<re.Match object; span=(0, 3), match='abc'>
"""

此时可以看到,匹配到了字符串 abc

示例3

(?<=...) 表示如果 ... 的匹配内容出现在当前位置的左侧,则匹配。这叫做 肯定型后视断言 (positive lookbehind assertion)(?<=abc)def 将会在 abcdef 中找到一个匹配,因为后视会回退 3 个字符并检查内部表达式是否匹配。内部表达式(匹配的内容)必须是固定长度的,意思就是 abca|b 是允许的,但是 a*a{3,4} 不可以。注意,以肯定型后视断言开头的正则表达式,匹配项一般不会位于搜索字符串的开头。

上面的解释比较抽象,那么具体是什么意思呢?我们看一个例子。

import restr1 = 'abc\tdefghi\txyz'
print(re.search('(?<=\t)def', str1))
"""
result:
<re.Match object; span=(4, 7), match='def'>
"""

程序先找到 def 字符串,然后再回退一个字符查看 def 前面的字符是否是 \t 字符,如果是,那么就匹配 def 字符串。

示例4

如果我们想要匹配两个 \t 字符中间的部分怎么办呢?

import restr1 = 'abc\tdefghi\txyz'
print(re.search('\t(.*)\t', str1))
"""
result:
<re.Match object; span=(3, 11), match='\tdefghi\t'>
"""

可以看到,此时,结果中包含了两端的 \t 字符,但是我们不想要它包含 \t 字符。为了实现这一目标,我们可以采用刚才我们提到的后视和前视。

import restr1 = 'abc\tdefghi\txyz'
print(re.search('(?<=\t).*(?=\t)', str1))
"""
result:
<re.Match object; span=(4, 10), match='defghi'>
"""

可以看到我们匹配到了两个 \t 字符中间的字符串,但是上述写法并不严谨,为了严谨,我们可以使用:

import restr1 = 'abc\tdefghi\txyz'
print(re.search('(?<=\t)(.*)(?=\t)', str1))
"""
result:
<re.Match object; span=(4, 10), match='defghi'>
"""

如果大家觉得有用,就请点个赞吧~

相关文章:

Python 正则表达式 (?=...) 和 (?<=...) 符号

Python 正则表达式 引言正文示例1示例2示例3示例4 引言 今天遇到了一个比较棘手的问题&#xff0c;于是终于打算要对正则表达式中的 (?...) 和 (?<...) 符号动手了。 正文 (?...) 表示当 … 匹配时&#xff0c;匹配成功&#xff0c;但不消耗字符串中的任何字符。这个…...

Vue.js中使用JavaScript实现路由跳转详解

在Vue应用中&#xff0c;利用Vue Router进行页面间的导航是一个常见需求。本篇博客将通过示例代码详细介绍如何在Vue组件中使用JavaScript实现路由跳转&#xff0c;包括传递参数的两种方式&#xff1a;通过params和query。让我们一步步深入了解。 基础设置 首先&#xff0c;确…...

社群裂变:从微光到星火的社群增长奥秘

在当今社交媒体盛行的时代&#xff0c;社群裂变已成为众多品牌、企业和个人实现快速增长的重要策略。社群裂变不仅能够有效扩大影响力&#xff0c;还能精准触达目标用户&#xff0c;实现高效转化。本文将深入探讨社群裂变的内涵、策略及实施方法&#xff0c;助您揭开社群增长的…...

Git命令Gitee注册idea操作git超详细

文章目录 概述相关概念下载和安装常见命令远程仓库介绍与码云注册创建介绍码云注册远程仓库操作关联拉取推送克隆 在idea中使用git集成add和commit差异化比较&查看提交记录版本回退及撤销与远程仓库关联 push从远程仓库上拉取&#xff0c;克隆项目到本地创建分支切换分支将…...

出差行程到底怎么管?这个“高分指南”划重点来了!

在日常商旅过程中&#xff0c;出差行程计划是必不可少的环节。公司需要以此为依据判断行程是否有必要、是否合理&#xff0c;确保出差行程与公司的业务需求相符。 通过胜意费控云&#xff0c;员工填写出差申请时&#xff0c;行程计划智能生成&#xff0c;平台自动匹配并带出差标…...

js设计模式--发布订阅者模式

概述 发布订阅者模式用于处理对象之间的事件通信&#xff0c;该模式涉及两个主要角色&#xff1a;发布者&#xff08;Publisher&#xff09;和订阅者&#xff08;Subscriber&#xff09; 发布者维护一个事件列表&#xff0c;并在事件发生时通知所有已注册的订阅者。订阅者可以…...

【图论】图论基础

图论不同地方讲的不太一样&#xff0c;本文仅限作者的理解 定义 图一般由点集 V V V 和边集 E E E 组成。 对于 v ∈ V v\in V v∈V&#xff0c;称 v v v 为该图的一个节点。 对于 e ∈ E e\in E e∈E&#xff0c;一般用二元组 ( u , v ) (u,v) (u,v) 表示 e e e&…...

Konga域名配置多个路由

云原生API网关-Kong部署与konga基本使用 Nginx server{listen 443 ssl;location / {proxy_pass http://127.0.0.1:8100;}location /openApi {proxy_pass http://172.31.233.35:7100/openApi;} } Kong {"id": "f880b21c-f7e0-43d7-a2a9-221fe86d9231&q…...

15.计算机网络

1.物理层的互联设备 中继器 和 集线器 2.集线器可以看做特殊的多路中继器 集线器 不可以做到自动寻址的功能 3.数据链路层 网桥 和 交换机 4.交换机是多端口网桥 5.网络层 路由器 6.应用层 网关 7.广播域 网络层 可以形成多个广播域 冲突域 网络层数据链路层 可以形成多个冲突域…...

【大数据·hadoop】在hdfs上运行shell基本常用命令

一、准备工作 1.1格式化并启动Hadoop服务 参见Hadoop在ubuntu虚拟机上的伪分布式部署|保姆级教程的4.7节 二、HDFS常用命令 接着&#xff0c;就愉快地在刚刚的命令行里敲命令啦 1.显示hdfs目录结构 hadoop fs -ls -R /hadoop fs: 这是Hadoop文件系统命令行的一部分&#x…...

TCP/IP 协议基础:构建互联网基石

目录 前言 一.网络通信协议 TCP/IP 1.网络通信协议 3.TCP/IP 协议 3.管理的组织和机构 4.RFC 二.OSI 参考模型 1.层次结构 2.通信机制 3.PDU 4.各层的功能 三.TCP/IP 协议簇 1.TCP/IP 与 OSI 的对应关系 2.TCP/IP 各层 3.TCP/IP 封装与分用 4.重要概念 5.分…...

Android OpenMAX(三)高通OMX组件实现基础

上一节了解了OMX组件实现的基础内容,这一节我们以高通OMX实现为例,简单看看如何实现一个OMX组件。本节代码参考自: omx_core_cmp.cpp qc_omx_component.h omx_vdec.h omx_vdec.cpp Tips:本篇文章旨在简单了解如何实现一个OMX组件,细节的内容不会仔细解读,代码阅读跳跃幅度…...

【比邻智选】MF871U模组

&#x1f680;搭载国产芯&#xff0c;严苛测试&#xff0c;稳定可靠 &#x1f6e0;️R16特性加持&#xff0c;5G LAN&#xff0c;纳秒级精度 &#x1f310;超低成本&#xff0c;丰富协议&#xff0c;连接无界限...

Unity 单例模式

Unity中单例模式是非常常用的写法&#xff0c;可以基于C#语言的几种不同方法来实现。 下面我将列出几种常见的实现方式&#xff1a; 1. 经典的单例模式 public class SingletonExample : MonoBehaviour {private static SingletonExample instance;public static SingletonEx…...

Oracle-一次TX行锁堵塞事件

问题背景&#xff1a; 接用户问题报障&#xff0c;应用服务出现大量会话堆积现象&#xff0c;数据库锁堵塞严重&#xff0c;需要协助进行问题定位和排除。 问题分析&#xff1a; 登录到数据库服务器上&#xff0c;首先查看一下数据库当前的等待事件情况&#xff0c;通过gv$ses…...

Gtid方式搭建主从复制+MHA高可用集群

GTID是什么 GTID(全局事务标识符),它用于唯一标识一个事务。每个GTID由三个部分组成: 服务器唯一标识符事务序列号全局事务标识符使用gtid可以简化主从复制的配置和管理,减少由于复制链路终端、主从数据不一致等问题带来的风险如何开启GTID: 在/etc/my.cnf文件中添加如下…...

基于matlab GUI的Alpha shapes边缘提取

1、程序介绍 本程序是基于matlab语言&#xff0c;使用alpha shapes算法实现点云边缘提取。算法具体原理参考博客&#xff1a;基于alpha shapes的边缘点提取&#xff08;matlab&#xff09;-CSDN博客。该程序包括3个按钮&#xff1a;加载点云、边缘点提取、保存。其中&#xff0…...

[Android]常见的包管理方式

在Android开发中&#xff0c;包管理主要是通过构建和依赖管理工具来处理。下面列举了几种最常见和主流的包管理方式&#xff1a; 一、Gradle Gradle 是 Android 官方推荐的构建工具&#xff0c;几乎成为了 Android 开发的标准。它支持自定义构建逻辑、依赖管理、多项目构建等…...

每日10亿数据的日志分析系统OOM

背景 一个每日10亿数据的日志清洗系统&#xff0c;主要工作就是从消息队列中消费各种各样的日志&#xff0c;然后对日志进行清洗&#xff0c;例如&#xff1a;用户敏感信息(姓名、手机号、身份证)进行脱敏处理,然后把清理完的数据交付给其他系统使用。 我们项目中&#xff0c;…...

智能驱动,精准管理:打造高效干部管理系统

干部管理系统是现代组织管理中不可或缺的工具&#xff0c;它通过信息技术的应用&#xff0c;提高了干部管理的效率和准确性。干部管理系统的主要功能包括&#xff1a; 1. 信息管理&#xff1a;系统可以存储和管理干部的个人信息&#xff0c;包括基本资料、工作经历、教育背景、…...

主动学习:让AI主动挑选最有价值的样本进行标注

1. 主动学习&#xff1a;不是AI在“等喂饭”&#xff0c;而是在“主动点菜”你有没有遇到过这种场景&#xff1a;手头有个图像分类项目&#xff0c;标注一张医学影像要花资深放射科医生15分钟&#xff0c;而你手上有5万张未标注CT切片——但预算只够标300张。或者在做客服对话意…...

AI驱动BI分析:MCP协议与Metabase助手实战指南

1. 项目概述&#xff1a;当AI助手成为你的BI分析师如果你和我一样&#xff0c;每天都要和Metabase打交道&#xff0c;那你肯定经历过这样的场景&#xff1a;业务同事跑过来问&#xff0c;“能不能帮我拉一下上个月每个渠道的转化率&#xff1f;”&#xff0c;或者产品经理说&am…...

AI工作流自动化实践:Claude数据同步工具架构与实现

1. 项目概述与核心价值 最近在折腾AI应用集成的时候&#xff0c;发现一个挺有意思的项目&#xff0c;叫 cam901051/claude-sync 。乍一看这个标题&#xff0c;你可能会有点懵&#xff0c;这到底是干嘛的&#xff1f;简单来说&#xff0c;这是一个旨在实现Claude&#xff08;…...

Tiny AI Client:零依赖、轻量化的AI API调用库设计与实战

1. 项目概述与核心价值最近在折腾AI应用本地化部署和轻量化客户端时&#xff0c;发现了一个挺有意思的项目——piEsposito/tiny-ai-client。这名字起得就很直白&#xff0c;“tiny”意味着小巧&#xff0c;“ai-client”点明了它是一个AI客户端。乍一看&#xff0c;你可能会觉得…...

Mac上如何用DistroAV插件实现无线多机位直播:NDI技术完整指南

Mac上如何用DistroAV插件实现无线多机位直播&#xff1a;NDI技术完整指南 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 还在为Mac上的OBS直播设置烦恼吗&#xff1f;想…...

华为OD机试真题 新系统 2026-05-06 JavaGoC语言 实现【匹配命令行前缀关键字】

目录 题目 思路 Code 题目 给定一组命令行字符串和一个命令前缀&#xff0c;需要找出所有以前缀开头的命令行表达式中&#xff0c;前缀之后的第一个关键字&#xff0c;并将这些关键字按字典序排序后返回。 如果找不到匹配前缀则返回空&#xff1b;匹配出多个相同关键字时只返…...

独立语音AI创业必读,ElevenLabs Independent计划全链路解析:从白名单内测→额度扩容→月度用量审计→续期失败预警

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs Independent计划的战略定位与生态价值 ElevenLabs Independent 计划并非单纯的技术授权项目&#xff0c;而是面向独立开发者、开源创作者与小型 AI 应用团队构建的可持续协作基础设施。其核…...

团队知识管理的失效:人员流动如何不导致知识流失

一、软件测试团队知识管理的特殊价值与脆弱性在软件测试领域&#xff0c;知识是保障产品质量的核心资产。不同于开发环节的代码沉淀&#xff0c;测试知识兼具显性与隐性双重属性&#xff1a;显性知识体现在测试用例、缺陷报告、自动化脚本等文档中&#xff0c;而隐性知识则蕴含…...

Specky:规范驱动开发平台,从AI氛围编程到确定性工程实践

1. Specky&#xff1a;一个重新定义AI辅助开发的确定性工程平台如果你和我一样&#xff0c;在过去几年里深度使用过GitHub Copilot、Claude Code这类AI编程助手&#xff0c;你肯定经历过那种又爱又恨的矛盾感。爱的是&#xff0c;它们确实能快速生成代码片段&#xff0c;把我们…...

Spring Boot项目整合阿里云OSS上传,如何避免Nginx代理下的405坑?

Spring Boot整合阿里云OSS上传的Nginx避坑指南&#xff1a;彻底解决405错误 在前后端分离架构中&#xff0c;文件上传功能几乎是每个Web应用的标配。当我们将Spring Boot与阿里云OSS结合使用时&#xff0c;Nginx作为反向代理常常会带来一个棘手的405 Method Not Allowed错误。这…...