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

Python从含数字的字符串中提取数值的通用方法咨询

通用数字提取方案:用正则搞定无固定格式的数字提取

完全可以写通用代码,核心就是用正则表达式匹配数字的通用特征,不用针对每种字符串单独写逻辑。

核心思路

你的所有目标数字都符合这个特征:可选负号、整数部分、可选小数点+小数部分、可选末尾的百分号。直接用正则匹配这个模式就行,不管前后的符号(>=、<=这些)和分隔符(or/and)是什么。

正则模式说明

用这个正则就能匹配你所有示例里的数字:

-?\d+\.?\d*%?

拆解下每个部分:

  • -?:匹配可选的负号(比如-6.25里的-)
  • \d+:匹配至少一位整数(比如5、6、3这些)
  • \.?:匹配可选的小数点(有的数字是整数,有的带小数)
  • \d*:匹配可选的小数部分(0位或多位数字,比如5.0里的0,-7.813里的813)
  • %?:匹配可选的百分号(有的数字带%,有的不带)

代码示例(Python)

直接写个函数,传入任意字符串就能提取数字:

import re

def get_numbers_from_str(input_str):
    # 定义匹配数字的正则
    num_pattern = r'-?\d+\.?\d*%?'
    # 找出所有匹配的数字
    matched_nums = re.findall(num_pattern, input_str)
    
    # 可选:把带%的转成浮点数(如果需要数值计算)
    processed_nums = []
    for num in matched_nums:
        # 去掉%,转成浮点数
        clean_num = num.replace('%', '')
        processed_nums.append(float(clean_num))
    
    return processed_nums

# 测试你的示例字符串
test_cases = [
    ">=5.0% or <=-6.25%",
    ">=6.25% or <=-7.813%",
    "<2.5% and >-3.125",
    ">=2.5% or <=-3.125%",
    ">=5.0% or <=-6.25%",
    "<5.0% or >-6.25%",
    "<3.125 and >-3.906%"
]

for case in test_cases:
    print(f"原字符串:{case}")
    print(f"提取的数字:{get_numbers_from_str(case)}\n")

通用性扩展

如果后续遇到其他数字格式(比如科学计数法1.2e-3),只需修改正则模式,比如改成:

-?\d+\.?\d*(?:e[+-]?\d+)?%?

就能覆盖科学计数法的情况。

注意事项

  • 如果字符串里出现非目标数字(比如日期、序号),可能需要结合上下文过滤,但根据你的示例,当前正则完全够用。
  • 如果不需要转成数值,直接返回matched_nums就能保留带%的原始字符串形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:05:19