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

如何用Python正则表达式拆分字符串中的符号、数值与单位?

Python正则表达式拆分符号、数值与单位

需求说明

需要从字符串中拆分出符号(如>=、<等)、数值(如40.55、50等)和单位(如%、mg/dl、cm2等),示例输入为">=40.55%",预期输出拆分出symbol = >=、value = 40.55、unit = %。

原正则的问题

你之前使用的正则表达式存在几个关键问题:

  • 开头同时用^和\A,二者功能重复,都是匹配字符串起始位置
  • 符号分组(\A[>|&lt;])*仅匹配单个>或<,无法识别>=、<=这类组合符号,且*量词会导致分组可能为空
  • 数值分组(\d+[.]+\d+)*强制要求小数点前后必须有数字,无法匹配整数(如"50%")
  • 单位分组([%|mg/dl|cm2]\Z)错误使用了字符集语法[],实际会匹配%、m、g等单个字符,而非完整的单位选项,且\Z和^的搭配逻辑混乱

正确实现方案

使用以下正则表达式可以精准匹配并拆分各部分:

import re

def parse_measurement(s):
    # 正则分组说明:
    # 1. 符号组:匹配可选的>=、<=、>、<、=,?表示符号可省略
    # 2. 数值组:匹配整数或小数,支持如40、40.55的格式
    # 3. 单位组:匹配指定的单位选项,支持%、mg/dl、cm2
    pattern = r'^([<>]=?|=)?(\d+(?:\.\d+)?)([%]|mg/dl|cm2)$'
    match_result = re.match(pattern, s.strip())  # strip()处理可能的首尾空格
    
    if match_result:
        symbol = match_result.group(1) if match_result.group(1) else ""
        value = match_result.group(2)
        unit = match_result.group(3)
        return symbol, value, unit
    return None, None, None

# 测试示例
x = ">=40.55%"
symbol, value, unit = parse_measurement(x)
print(f"symbol = {symbol}")
print(f"value = {value}")
print(f"unit = {unit}")

代码说明

  • 符号分组([<>]=?|=)?:覆盖常见的比较符号,?标记符号为可选,兼容无符号的字符串(如"40.55%")
  • 数值分组(\d+(?:\.\d+)?):\d+匹配整数部分,(?:\.\d+)?匹配可选的小数部分,(?:...)是不捕获分组,避免生成多余的分组结果
  • 单位分组([%]|mg/dl|cm2):用|分隔不同的单位选项,确保匹配完整的单位字符串而非单个字符
  • strip()处理输入字符串可能的首尾空格,提升兼容性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:00:28