如何使用re.sub替换字符串中的$字符?含批量替换场景
问题解决:用re.sub替换字符串中的$符号
一、依次替换$为列表元素的正确写法
你原来的代码无效,核心问题有两个:
- $是正则特殊字符:它默认匹配字符串结尾或换行前的位置,必须用反斜杠转义成
\$才能匹配字面意义的$符号; - \b的使用错误:
\b是单词边界,而$本身不是单词字符,\b\$的写法会导致匹配不到目标$。
正确的写法应该先转义$,再用lambda函数依次取出nums的元素:
import re my_string = "We change $ to 10, $ to 22, $ to 120, $ to 230 and $ to 1000." nums = [1, 2, 3, 4, 5] # 用迭代器避免修改原列表(可选,pop(0)会改变原nums) num_iter = iter(nums) result = re.sub(r'\$', lambda _: str(next(num_iter)), my_string) print(result)
如果不在意修改原列表,也可以直接用nums.pop(0):
result = re.sub(r'\$', lambda _: str(nums.pop(0)), my_string)
两种写法都能得到目标字符串:"We change 1 to 10, 2 to 22, 3 to 120, 4 to 230 and 5 to 1000."
二、将$替换为常量值的方法
同样需要先转义$,然后直接把常量值作为re.sub的第二个参数即可,比如要把所有$替换成"XXX":
import re my_string = "We change $ to 10, $ to 22, $ to 120, $ to 230 and $ to 1000." result = re.sub(r'\$', "XXX", my_string) print(result)
输出结果:"We change XXX to 10, XXX to 22, XXX to 120, XXX to 230 and XXX to 1000."
内容的提问来源于stack exchange,提问作者Bsh
相关产品推荐
相关产品推荐

