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

如何编写正则表达式识别字符串中带SI/英制单位的物理量

优化方案

你原来的正则主要缺少数值范围、复合单位、特殊符号前缀的适配,优化后的函数可以覆盖给出的所有测试用例:

import re

def cleanup(s):
    pattern = re.compile(
        r"~?\d[,\d]*(?:\.\d+)?(?:\s*[x:-]\s*\d[,\d]*(?:\.\d+)?)*\s*[a-zA-Z°µ³][a-zA-Z0-9°µ³/*\s-]*?(?=\s*(?:[)@|/,=]|$|\)))",
        re.IGNORECASE
    )
    # 清除匹配结果首尾多余的空白、制表符、换行符
    return [res.strip() for res in pattern.findall(s)]

主要优化点:

  1. 新增~?适配近似值前缀,可正确识别~3929cm³这类数值
  2. 数值部分兼容千位分隔符(如4,868)、小数、x连接的尺寸、-连接的范围、:连接的比例,同时支持符号前后的空格,可正确识别15.6x1.4 in、3000-7500rpm、11.5:1这类格式
  3. 单位部分新增支持³、空格、连字符、斜杠,可正确识别lb-ft、km/h、Gallon US这类复合单位
  4. 新增正向预查终止逻辑,匹配到单位后的括号、@、|、/、逗号、等号、结束符就停止,避免匹配无关内容
  5. 最后对结果做首尾去空处理,输出格式更干净,不会残留换行、制表符

如果后续新增特殊单位,直接在单位的字符集([a-zA-Z°µ³])里加入对应字符即可,无需调整整体结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:24:03