如何使用re.sub替换字符串中带数字的指定部分并保留原数字
如何使用re.sub替换字符串中带数字的指定部分并保留原数字
嗨,我明白你的问题啦!你想把字符串末尾的数字_F替换成对应的数字_DO,但之前的写法没保留住那个变量数字,问题出在替换字符串里你写了固定的[0-9]_DO,这只是普通文本,不会引用你捕获到的数字哦。
正确的思路是利用正则的捕获组功能:先把需要保留的数字捕获下来,然后在替换的时候引用这个捕获到的内容,具体做法如下:
基础版(匹配单个数字)
如果你的数字是单个字符(比如3_F),可以这样写:
import re result = re.sub(r"([0-9])_F$", r"\1_DO", 'sdsd3_F') print(result) # 输出结果:sdsd3_DO
解释一下:
r"([0-9])_F$"里的([0-9])是第一个捕获组,专门匹配并保存单个数字;_F$确保只匹配字符串末尾的_F。- 替换字符串
r"\1_DO"里的\1就是引用第一个捕获组里保存的数字,再拼接上_DO,这样就保留了原数字。
进阶版(匹配多位数字)
如果数字可能是多位(比如123_F),只需要把正则里的[0-9]改成[0-9]+,就能匹配1个或多个数字:
import re result = re.sub(r"([0-9]+)_F$", r"\1_DO", 'sdsd123_F') print(result) # 输出结果:sdsd123_DO
另外要注意,在Python里最好用原始字符串(前面加r)来写正则和替换字符串,这样可以避免转义字符带来的问题。
备注:内容来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

