Python正则表达式中re.sub自定义替换方法正确使用方法

news2024/11/18 6:48:41

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

话不多说,直接开搞,如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

在使用正则替换时,有时候需要将匹配的结果做对应处理,便可以使用自定义替换方法。

re.sub的用法为:

re.sub('匹配表达式',替换字符或替换函数,替换次数,其他参数)

例如,加入将字符串中的$开头的变量替换为上下文context中对应的值,可以操作如下。

import re
context = {'a': 1, 'b': 2, 'except': 3}
text = '$a + $b = $except'

def repl_func(matched):
    if matched:
        text = matched.group(1)
        return str(context.get(text))

result = re.sub('\$(\w+)', repl_func, text)
print(result)

打印结果为:

1 + 2 = 3

下面是一个用于替换字符串,字典,列表,元祖类型中特定变量的方法。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import re
import json


def parser(origin, *args, delimiter="$", **kwargs):  # 支持修改delimiter定界符

    patten = r'\{}(?P<var>.+?)'.format(delimiter)

    def repl_func(matched):   # 自定义re.sub使用的替换方法
        var = matched.group('var')
        if var.isdigit():   # 如果是数字, 则从args中替换
            index = int(var) - 1
            if index < len(args):
                return args[index]
            else:
                return "{}{}".format(delimiter, var)   # 无替换参数则返回原值
        else:
            return kwargs.get(var, None) or "{}{}".format(delimiter, var)   # 返回kwargs参数中值 or 原值

    if isinstance(origin, str):
        return re.sub(patten, repl_func, origin, re.M)
    elif isinstance(origin, (dict, list)):  # 使用json.dumps转为字符串, 替换,然后重新转为dict/list
        return json.loads(re.sub(patten, repl_func, json.dumps(origin), re.M))
    else:
        if isinstance(origin, tuple):
            return tuple(json.loads(re.sub(patten, repl_func, json.dumps(origin), re.M)))  # 转换后重新转为tuple


if __name__ == '__main__':
    s = ['性别: $2  年龄: $3\n$a', '$1', {"say": "$a"}]
    print(parser(s, 'kevin', 'male', '20', a="hello, world!"))

好了,今天的分享就差不多到这里了!

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

最后,宣传一下呀~👇👇👇 更多源码、资料、素材、解答、交流 皆点击下方名片获取呀👇👇👇

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

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

相关文章

ES线程池设置

一文搞懂ES中的线程池 - 知乎 ES线程池设置-阿里云开发者社区 文章目录 一、简介 二、线程池类型 2.1、fixed 2.2、scaling 2.3、direct 2.4、fixed_auto_queue_size 三、处理器设置 四、查看线程池 4.1、cat thread pool 4.2、nodes info 4.3、nodes stats 4.4、no…

【C++初阶】模拟实现优先级队列priority_queue

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

Elasticsearch:将段落向量搜索添加到 Lucene

作者&#xff1a;Benjamin Trent 向量搜索是信息检索工具箱中的一个强大工具。 将向量与词法搜索&#xff08;如 BM25&#xff09;一起使用很快变得司空见惯。 但向量搜索中仍然存在一些痛点需要解决。 主要的一个是文本嵌入模型和处理更大的文本输入。 像 BM25 这样的词法搜索…

数据库备份与恢复

数据库备份的重要性 在生产环境中&#xff0c;数据的安全性至关重要&#xff0c;任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因有&#xff1a;程序错误、人为操作错误、运算错误、磁盘故障、灾难(如火灾、地震)和盗窃。 数据库备份的分类 从物理与逻辑的角度&a…

【多面体:知识蒸馏:Pansharpening】

Multipatch Progressive Pansharpening With Knowledge Distillation &#xff08;基于知识蒸馏的多面体渐进锐化算法&#xff09; 在这篇文章中&#xff0c;我们提出了一种新的多面体和多级泛锐化方法与知识蒸馏&#xff0c;称为PSDNet。不同于现有的pansharpening方法&…

ASP.NET Core 中基于 Controller 的 Web API

基于 Controller 的 Web API ASP.NET Wep API 的请求架构 客户端发送Http请求&#xff0c;Contoller响应请求&#xff0c;并从数据库读取数据&#xff0c;序列化数据&#xff0c;然后通过 Http Response返回序列化的数据。 ControllerBase 类 Web API 的所有controllers 一般…

中央空调秒变智能 青岛中弘P15面板式空调网关初体验

在智能家居逐步渗透进千家万户的今天&#xff0c;如何将中央空调融入到智能化场景&#xff0c;以实现场景联动、提升家居生活的智能化和科技化程度&#xff0c;中弘给出了新的答案。本期智哪儿就带大家测评一下青岛中弘P15面板式空调网关&#xff0c;一起看看它的价值所在。 高…

The Sandbox 即将参加韩国区块链周,并带来一系列独家周边活动!

韩国区块链周&#xff08;Korea Blockchain Week&#xff09;即将到来&#xff0c;届时将有成千上万的 NFT 项目、建设者、社区成员、企业家、投资者和爱好者齐聚首尔&#xff0c;分享 Web3 的最新更新和未来愿景。 继成功举办韩流崛起 LAND 销售并宣布多个合作伙伴关系之后&a…

计算机毕设之基于python+echarts+mysql的图书馆可视化管理系统(文档+代码+部署教程)

系统阐述的是一款图书馆可视化管理系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…

群晖NAS:DSM7.1激活Advanced Media Extensions【自留记录】

群晖NAS&#xff1a;DSM7.1激活Advanced Media Extensions【自留记录】 本文仅半白群晖可用&#xff0c;不需要安装其他套件或者ssh修改什么 使用DS Video 网页播放视频时候&#xff0c;提示&#xff1a;【不支持当前所选音轨的文件格式&#xff0c; 因此无法播放视频。请尝试…

编程题四大算法思想(二)——回溯法:N皇后问题、子集和问题、地图填色问题、迷宫问题

文章目录 回溯法迷宫游戏 N皇后问题基本概念解空间4后问题的解空间 可行解和最优解回溯法回溯法术语回溯法的关键问题回溯法的基本思想4后问题的约束条件n后问题生成问题状态的基本方法 子集和问题一个朴素的求解方法回溯回溯法的剪枝技术 地图填色问题 回溯法 迷宫游戏 深度优…

Android RecyclerView 之 吸顶效果

前言 上一篇文章已经实现了列表跟宫格布局的动态切换&#xff0c;这篇文章主要来说通过 CoordinatorLayout 和 AppbarLayout 的配合&#xff0c;以及 NestedScrollView 来实现吸顶效果 。效果如下。 一、CoordinatorLayout 是什么&#xff1f; CoordinatorLayout 是 Androi…

pnpm快速创建 Vue.js 项目(npm类似)

目录 pnpm 创建一个 Vue.js 项目 前提准备&#xff1a; 运行创建命令&#xff1a; 选择项目配置&#xff1a;&#xff08;按需选择&#xff09; cd 项目名&#xff1a;&#xff08;进入项目终端&#xff09; 安装项目依赖&#xff1a; 运行项目&#xff1a; pnpm 创建一…

文献速读|5分的生信+免疫组化:单细胞测序转录组联合bulk转录组肿瘤预后模型

今天给大家分享一篇IF5.8的纯生信单细胞联合Bulk转录组构建预后模型的文章&#xff0c;于2023年3月19日发表在Cancer Immunology Immunotherapy上&#xff1a;Integrative analyses of bulk and single-cell RNA-seq identified cancer-associated fibroblasts-related signatu…

Docker安装详细步骤

Docker安装详细步骤 1、安装环境准备 主机&#xff1a;192.168.40.5 zch01 设置主机名 # hostnamectl set-hostname zch01 && bash 配置hosts文件 [root ~]# vi /etc/hosts 添加如下内容&#xff1a; 192.168.40.5 zch01 关闭防火墙 [rootzch01 ~]# systemct…

W5500-EVB-PICO通过SNTP获取网络时间(十一)

前言 上一章我们用W5500_EVB_PICO 开发板做Ping数据测试IP检测连通性&#xff0c;那么本章我们进行W5500_EVB_PICO SNTP的测试。 什么是NTP&#xff1f; NTP(Network Time Protocol&#xff09;网络时间协议基于UDP&#xff0c;用于网络时间同步的协议&#xff0c;使网络中的计…

如何高效进行测试用例评审

1.用例评审的目的 为了减少测试人员执行阶段做无效工作&#xff0c;执行无效case&#xff0c;提交无效缺陷&#xff08;可以友情提醒研发同学&#xff0c;讲到自己负责的相关模块时&#xff0c;注意下是否存在异议点&#xff09;为了避免三方&#xff08;产品、研发、测试&…

多项式求逆

已知 F F F&#xff0c;求 G G G 考虑倍增 F ( x ) ∗ H ( x ) ≡ 1 ( m o d x n / 2 ) F(x) * H(x) \equiv 1 \pmod{x^{n/2}} F(x)∗H(x)≡1(modxn/2) F ( x ) ∗ G ( x ) ≡ 1 ( m o d x n / 2 ) F(x) * G(x) \equiv 1 \pmod{x^{n/2}} F(x)∗G(x)≡1(modxn/2) 假设 H H…

噪声的产生机理和来源

引言&#xff1a;噪声广泛存在于自然界&#xff0c;上节揭示了噪声的本质&#xff0c;噪声按照噪声携带能量的强弱分为功率型噪声和信号型噪声&#xff0c;功率型噪声持续时间短&#xff0c;能量强&#xff0c;对设备的寿命具有很大的影响&#xff0c;而信号型噪声顾名思义来源…

不想出门?那就把“自然”搬进家里吧!

为自然主题房间寻找灵感&#xff1a; 简单创意 以自然为主题的房间将自然灵感的色调&#xff08;棕色、灰色、米色、白色、蓝色和绿色&#xff09;与皮革、木材、黄麻和藤条等纹理相结合。就像真实的户外一样&#xff0c;它也懂得平衡的力量。户外&#xff1a; 每一片树丛&…