关于 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)

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

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

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

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




结尾

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

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值