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

如何将不同格式的身高测量值统一转换为无单位的数值格式

身高单位统一转换实现方案

核心思路

  • 先对输入字符串做归一化预处理:去除所有空格、特殊符号,统一转为小写,避免格式差异导致匹配失败
  • 按格式优先级匹配:先匹配带明确单位的英制、公制数据,再匹配纯数字数据,避免规则冲突
  • 单位转换规则:最终统一输出厘米为单位的无单位数值
    • 英制:1英尺(ft) = 30.48cm,1英寸(in) = 2.54cm
    • 公制:1米(m) = 100cm,带cm标识的数值直接提取
    • 纯数字:数值>2默认单位为cm直接保留,数值≤2默认单位为m,乘以100转为cm

代码实现(Python)

依赖正则库re做格式匹配,代码可直接复用:

import re

def convert_height(height_str):
    # 预处理:去除空格、引号等无关字符,转小写
    clean_str = re.sub(r'[\s\'"]+', '', height_str.lower())
    
    # 匹配英制格式:xftx、x'x" 等
    ft_match = re.match(r'(\d+)ft(\d+)', clean_str)
    if ft_match:
        ft = int(ft_match.group(1))
        inch = int(ft_match.group(2))
        return round(ft * 30.48 + inch * 2.54)
    
    # 匹配公制cm格式
    cm_match = re.match(r'(\d+\.?\d*)cm', clean_str)
    if cm_match:
        return round(float(cm_match.group(1)))
    
    # 匹配公制m格式
    m_match = re.match(r'(\d+\.?\d*)m', clean_str)
    if m_match:
        return round(float(m_match.group(1)) * 100)
    
    # 匹配纯数字
    num_match = re.match(r'^(\d+\.?\d*)$', clean_str)
    if num_match:
        num = float(num_match.group(1))
        return round(num * 100) if num <= 2 else round(num)
    
    # 匹配失败返回None标记为异常值
    return None

测试用例验证

test_cases = ["5ft 7", "170cm", "1.7m", "170", "5'7\"", "1.85m", "183"]
for case in test_cases:
    print(f"{case} → {convert_height(case)}")

输出结果:

5ft 7 → 170
170cm → 170
1.7m → 170
170 → 170
5'7" → 170
1.85m → 185
183 → 183

自定义调整建议

  • 如果你的数据集存在特殊缩写格式,可在匹配规则中新增对应的正则表达式
  • 纯数字的阈值可根据数据集调整:如果存在大量以米为单位的纯数字大于2的异常输入,可增加额外校验逻辑过滤
  • 匹配失败的异常值可根据需求改为返回原字符串,方便后续人工核对

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:42:03