如何在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
相关产品推荐
相关产品推荐

