关于 re.sub 部分替换的解决办法
- 写作背景
- 问题重现
- 解决办法
- 代码详解
- 结尾
写作背景
最近本菜鸡遇到一个问题,我想将字符串中某一部分替换成指定内容,而且为了定位到要替换的内容,所以使用正则的时候还需要前后一些字符作为锚点,这可让我犯了难。
不过查阅相关文章后,我确定了如何解决,并写下此篇文章以记录。
如果觉得我这篇文章写的好的话,能不能给我 点赞
、评论
、收藏
一条龙(☆▽☆)。如果要点个 关注
的话也不是不可以🤗。
请各位参加一下文末的 投票
哦,如果 有什么不足之处,还 请各位大佬在评论区提出,不胜感激。
问题重现
拿一个网址 https://www.xxx.com/?count=5&begin=1&userid=111
为例。
全部替换大家应该都会,比如说我想要将 begin=1
替换为 start=12
,就可以使用下述代码解决。
可以看到,啪的一下他就运行出来了,很快噢。
那么问题来了,如果说我想要将参数 begin
的值修改为 12
应该怎么办呢?
我最初单纯地以为简简单单地加上 括号 的使用如下所示即可达成目标,却不曾想结果不尽人意,如下图所示。
可以看到,它直接把 begin=1
这个整体替换成了 12
,这可不是我们预期的效果。
解决办法
既然自己搞不定,那肯定要寻求外部帮助。于是在我千辛万苦的探索后,我找到了 这篇问答 。
因为都是英文,我也懒得仔细看,不过根据这段代码我看出了些端倪。
可以看到,替换的字符串中 \1
的位置变成了 不想被替换的部分 ,所以我可以大胆猜测 \1
的作用就是 代替部分替换中不想要被替换的部分,那这么一来,我们使用 括号 将不想被替换的部分括住,在替换字符串中用 \1
代替这一部分,问题也就迎刃而解了。
(我以前还真不知道有这操作,我好菜啊,别骂つ﹏⊂)
代码详解
基于那篇问答的解决方案,针对上边提出的问题,我的解决思路如下。
re.sub('(begin=)\d+', r'\1' + '12', url)
看一下结果。
好像还是不太对劲,被替换的部分直接变成了 J
,什么原因呢?
应该是 \1
和 12
结合起来变成了 \112
,就是 ASCII
码中的第 112 位字符,即 J
,所以这两部分不可直接相加,那怎么办?
我的解决方案是 只括住 begin
作为不改变的部分而将 =
作为被替换字符的一部分 ,结果如下图所示。
成功完成目标!!!
如果有什么其他的解决办法也可在评论区进行讨论。
备注:可能会有人问为什么不直接把 12
和 \1
写到一个引号中,是因为实际使用过程中使用的是 变量 ,而不是这个确定的值,所以就分开写咯。
结尾
有想要一起学习 python
的小伙伴可以 私信我
进群哦。
以上就是我要分享的内容,因为 学识尚浅,会有不足,还 请各位大佬指正。
有什么问题也可在评论区留言。