如何在Python中标准化数字字符串格式?
Python数字字符串标准化实现
要实现不同格式数字字符串的统一标准化,可以通过以下逻辑处理:
- 移除千位分隔符:空格、后跟三位数字的点、以及作为分组符号的逗号(非小数点)都属于千位分隔符,直接移除;
- 统一小数点符号:将用作小数点的逗号替换为标准的点符号;
- 数值格式化:把处理后的字符串转为数值,再格式化为保留两位小数、无千位分隔的统一格式。
实现代码
def standardize_number_str(num_str): # 先移除所有空格(空格必然是千位分隔符) processed = num_str.replace(' ', '') comma_count = processed.count(',') dot_count = processed.count('.') if comma_count > 0 and dot_count > 0: # 同时存在逗号和点:逗号是千位分隔符,直接移除;点保留为小数点 processed = processed.replace(',', '') elif comma_count > 0: # 仅存在逗号:判断是否为小数点(后接两位数字) decimal_part = processed.split(',')[-1] if len(decimal_part) == 2: processed = processed.replace(',', '.') else: processed = processed.replace(',', '') elif dot_count > 0: # 仅存在点:判断是否为千位分隔符(后接三位数字) decimal_part = processed.split('.')[-1] if len(decimal_part) == 3: processed = processed.replace('.', '') # 转换为数值并格式化为两位小数 try: num = float(processed) return f"{num:.2f}" except ValueError: # 处理无效数字字符串的情况,可根据需求调整返回值 return None # 测试示例 test_cases = [ "110000", "110.000", "110 000", "110000,00", "110,000", "110,000.00" ] for case in test_cases: print(f"输入: {case} → 输出: {standardize_number_str(case)}")
测试输出
输入: 110000 → 输出: 110000.00 输入: 110.000 → 输出: 110000.00 输入: 110 000 → 输出: 110000.00 输入: 110000,00 → 输出: 110000.00 输入: 110,000 → 输出: 110000.00 输入: 110,000.00 → 输出: 110000.00
这个方案无需复杂正则,通过简单的字符替换和逻辑判断就能覆盖你给出的所有场景,同时兼容常见的其他数字格式(如123.4转为123.40、1,234.56转为1234.56等)。
内容的提问来源于stack exchange,提问作者zero.bject
相关产品推荐
相关产品推荐

