Python处理货币相关文本转换时lakhs单位转换结果异常问题
逆文本归一化lakhs货币单位转换逻辑修复
问题描述
开发逆文本归一化功能时,需要处理lakhs类货币文本,完成单位到数值的换算同时保留其余关联文本。
使用现有代码运行测试用例string_value = "25 lakhs only",预期输出为['2500000', 'only'],实际输出为['25', '2500000', 'only'],原始数值位未被移除,结果不符合要求。
原有问题代码
def money_con(string_value): str_list = string_value.split(" ") new_list = [] for index,char in enumerate(str_list): if char == "lakhs": res = int(str_list[index-1]) * 100000 new_list.append(str(res)) else: new_list.append(str_list[index]) return new_list string_value = "25 lakhs only" res = money_con(string_value) print(res)
根因分析
逐词遍历拼接结果时,没有对lakhs的前置数值做特殊处理:遍历到前置数值(比如用例里的25)时,因为当前词不是lakhs,会被直接加入结果列表;等遍历到lakhs时,又会计算换算后的数值追加到列表,最终导致原始数值残留。
修复方式
遍历过程中不需要依赖索引取前一位元素:当匹配到lakhs时,直接把结果列表最后一个元素(也就是刚加进去的前置数值)弹出,替换为换算完成的数值即可,其余非单位词正常追加。
修复后可运行代码
def money_con(string_value): str_list = string_value.split(" ") new_list = [] for char in str_list: if char == "lakhs": # 移除前一位原始数值,替换为单位换算后的值 pre_val = new_list.pop() converted = int(pre_val) * 100000 new_list.append(str(converted)) else: new_list.append(char) return new_list # 测试验证 string_value = "25 lakhs only" res = money_con(string_value) print(res) # 输出结果:['2500000', 'only'],完全符合预期
拓展提示:如果后续需要兼容小数数值、多印度货币单位(比如crore、lakh变体拼写)混合的场景,可以在当前逻辑基础上补充数值格式校验、多单位换算映射表即可。
内容的提问来源于stack exchange,提问作者chalns
相关产品推荐
相关产品推荐

