• 关于 re.sub 部分替换的解决办法


    关于 re.sub 部分替换的解决办法

    写作背景

    最近本菜鸡遇到一个问题,我想将字符串中某一部分替换成指定内容,而且为了定位到要替换的内容,所以使用正则的时候还需要前后一些字符作为锚点,这可让我犯了难。
    不过查阅相关文章后,我确定了如何解决,并写下此篇文章以记录。
    如果觉得我这篇文章写的好的话,能不能给我 点赞评论收藏 一条龙(☆▽☆)。如果要点个 关注 的话也不是不可以🤗。

    请各位参加一下文末的 投票 哦,如果 有什么不足之处,还 请各位大佬在评论区提出,不胜感激。

    问题重现

    拿一个网址 https://www.xxx.com/?count=5&begin=1&userid=111 为例。
    全部替换大家应该都会,比如说我想要将 begin=1 替换为 start=12 ,就可以使用下述代码解决。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/bed6e010556c4731ac9d8e4edddfd2ae.png可以看到,啪的一下他就运行出来了,很快噢。

    那么问题来了,如果说我想要将参数 begin 的值修改为 12 应该怎么办呢?

    我最初单纯地以为简简单单地加上 括号 的使用如下所示即可达成目标,却不曾想结果不尽人意,如下图所示。
    在这里插入图片描述
    可以看到,它直接把 begin=1 这个整体替换成了 12 ,这可不是我们预期的效果。

    解决办法

    既然自己搞不定,那肯定要寻求外部帮助。于是在我千辛万苦的探索后,我找到了 这篇问答
    在这里插入图片描述
    因为都是英文,我也懒得仔细看,不过根据这段代码我看出了些端倪。

    可以看到,替换的字符串中 \1 的位置变成了 不想被替换的部分 ,所以我可以大胆猜测 \1 的作用就是 代替部分替换中不想要被替换的部分,那这么一来,我们使用 括号 将不想被替换的部分括住,在替换字符串中用 \1 代替这一部分,问题也就迎刃而解了。
    (我以前还真不知道有这操作,我好菜啊,别骂つ﹏⊂)

    代码详解

    基于那篇问答的解决方案,针对上边提出的问题,我的解决思路如下。

    re.sub('(begin=)\d+', r'\1' + '12', url)
    
    • 1

    看一下结果。
    在这里插入图片描述
    好像还是不太对劲,被替换的部分直接变成了 J ,什么原因呢?

    应该是 \112 结合起来变成了 \112 ,就是 ASCII 码中的第 112 位字符,即 J ,所以这两部分不可直接相加,那怎么办?

    我的解决方案是 只括住 begin 作为不改变的部分而将 = 作为被替换字符的一部分 ,结果如下图所示。
    在这里插入图片描述
    成功完成目标!!!
    如果有什么其他的解决办法也可在评论区进行讨论。

    备注:可能会有人问为什么不直接把 12\1 写到一个引号中,是因为实际使用过程中使用的是 变量 ,而不是这个确定的值,所以就分开写咯。




    结尾

    有想要一起学习 python 的小伙伴可以 私信我 进群哦。

    以上就是我要分享的内容,因为 学识尚浅会有不足,还 请各位大佬指正
    有什么问题也可在评论区留言。
    在这里插入图片描述

  • 相关阅读:
    Oracle EBS fndgfm.jsp error : 您没有访问此文件内容的权限
    Flink笔记整理(七)
    什么是JavaScript的事件驱动编程(event-driven programming)?
    mysql-Innodb解析
    解决:div获取不到键盘事件
    无涯教程-JavaScript - ASINH函数
    阿里内部 Java 面试题泄露:分布式 + 高并发 +Spring boot,扛住 HR 拷问
    跑步耳机排行榜,目前最好的六款跑步耳机
    SpringMvc拦截器
    jemeter压测【2万用户每秒5次请求在30秒内处理完请求】
  • 原文地址:https://blog.csdn.net/lhys666/article/details/127903567