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

如何在Python中不使用numpy、pandas替换字符串内数字为指定字符

Python无第三方依赖的字符串数字替换实现

实现逻辑说明

该实现完全基于Python内置标准能力,不调用numpy、pandas等任何第三方库:

  • 先通过规则定位到字符串中需要处理的连续数字片段,示例中需要处理的是末尾10位长度的学号数字段,前面表示分数的90属于不需要替换的内容
  • 按照自定义的替换规则,保留数字段指定位置前的内容,从给定的替换字符集中取对应长度的字符,覆盖数字段中需要替换的区间,再拼接保留数字段剩余部分
  • 最终拼接回原字符串得到结果

可复用代码

import re

def digit_replace(origin_text: str, replace_chars: str, target_digit_len: int = 10, replace_offset: int = 3, replace_len: int = 3) -> str:
    """
    数字段替换函数
    :param origin_text: 原始输入字符串
    :param replace_chars: 自定义替换字符集,按顺序取对应长度字符完成替换
    :param target_digit_len: 需要处理的连续数字段长度,默认匹配10位连续数字(对应示例的学号规则)
    :param replace_offset: 数字段内开始替换的索引位置(从0开始计数),默认从第4位开始替换
    :param replace_len: 单次替换的字符长度,默认替换3位
    """
    if len(replace_chars) < replace_len:
        raise ValueError("替换字符集长度不足,无法完成对应位数的替换")
    
    def match_replace(match_res):
        num_part = match_res.group()
        return num_part[:replace_offset] + replace_chars[:replace_len] + num_part[replace_offset+replace_len:]
    
    # 匹配指定位数的连续数字段完成替换
    return re.sub(rf'\d{{{target_digit_len}}}', match_replace, origin_text)


# 示例场景调用
if __name__ == "__main__":
    raw_str = "A student has secured 90% of marks whose roll number is 2012684954"
    result_str = digit_replace(raw_str, replace_chars="HKM")
    print(result_str)

效果验证

运行上述代码,输出结果和示例要求完全一致:

A student has secured 90% of marks whose roll number is 201HKM4954

自定义调整方式

  • 如果需要替换其他规则的数字段,修改target_digit_len参数为对应数字段长度即可,比如要替换8位连续数字就传8
  • 如果要调整替换的位置、替换长度,对应修改replace_offset、replace_len参数即可,注意保证传入的替换字符集长度不小于替换长度
  • 如果不想引入re标准库,也可以通过逐字符遍历的方式识别连续数字段:遍历字符串时记录连续数字的起止位置,定位到符合长度要求的数字段后做切片替换即可,全程不需要导入任何模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:24:25