You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Regex正则表达式替换字符串中指定位置的数字

需求与问题

需要将字符串:

"303000~303000 : ", numbers_303000_303000)

替换为:

"503000~503000 : ", numbers_503000_503000)

此前尝试re.sub(r'3', r'5', s)会替换所有3,得到错误结果:"502000~505000 : ", numbers_502000_505000),需精准替换每个303000的首位3。


解决方案

方案1:精准匹配目标前缀(最通用)

利用正则正向预查定位仅在03000前的3,只替换该位置的字符:

import re

s = '"303000~303000 : ", numbers_303000_303000)'
result = re.sub(r'3(?=03000)', r'5', s)
print(result)

输出:

"503000~503000 : ", numbers_503000_503000)
  • (?=03000):确保匹配的3后面紧跟03000,但不包含后续字符在匹配结果中,避免误替换其他3。

方案2:直接替换完整目标字符串(最直观)

如果需求就是把所有303000替换为503000,直接匹配完整数字串更简单:

result = re.sub(r'303000', r'503000', s)

这种方式完全不会误匹配,适合明确替换固定数字的场景。

方案3:限定替换范围(可选)

如果需要仅替换特定位置的数字(比如仅引号内或仅变量名中),可以用后顾断言缩小范围:

  • 仅替换引号内的目标数字:
    result = re.sub(r'(?<=")3(?=03000)', r'5', s)
    
  • 仅替换变量名中的目标数字:
    result = re.sub(r'(?<=numbers_)3(?=03000)', r'5', s)
    

内容的提问来源于stack exchange,提问作者woj69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:59:55