如何用Python正则表达式拆分字符串中的符号、数值与单位?
Python正则表达式拆分符号、数值与单位
需求说明
需要从字符串中拆分出符号(如>=、<等)、数值(如40.55、50等)和单位(如%、mg/dl、cm2等),示例输入为">=40.55%",预期输出拆分出symbol = >=、value = 40.55、unit = %。
原正则的问题
你之前使用的正则表达式存在几个关键问题:
- 开头同时用
^和\A,二者功能重复,都是匹配字符串起始位置 - 符号分组
(\A[>|<])*仅匹配单个>或<,无法识别>=、<=这类组合符号,且*量词会导致分组可能为空 - 数值分组
(\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
相关产品推荐
相关产品推荐

