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

如何不使用正则表达式从字符串中提取数字?

不使用正则提取字符串内所有数字的实现方案

给定测试场景:

  • 待处理字符串:userVariable = "someTextWithNumbers432andTextwith331"
  • 预期提取结果:[432, 331]

不能使用正则的前提下,可落地的实现方法如下:

  • 逐字符遍历缓存法
    这是兼容性最强的通用方案,不依赖任何语言专属的高级函数,只要是支持字符串遍历的编程语言都能实现:
    1. 先初始化一个空列表存最终提取结果,再初始化一个空字符串当临时缓存,用来存储连续碰到的数字
    2. 逐个遍历字符串里的每一个字符
    3. 如果当前字符是数字,就追加到临时缓存里
    4. 如果当前字符不是数字,就检查临时缓存:如果缓存里有内容,就把缓存的字符串转成整数存入结果列表,随后清空缓存
    5. 整个字符串遍历完成后,必须再检查一次临时缓存——不然如果字符串末尾是数字,这部分内容会被漏掉
      参考Python实现代码:
    userVariable = "someTextWithNumbers432andTextwith331"
    result = []
    temp_cache = ""
    for char in userVariable:
        # 直接通过字符顺序判断是否为数字,底层利用了数字字符编码连续的特性
        if '0' <= char <= '9':
            temp_cache += char
        else:
            if temp_cache:
                result.append(int(temp_cache))
                temp_cache = ""
    # 收尾处理字符串末尾的数字
    if temp_cache:
        result.append(int(temp_cache))
    
  • 非数字字符替换拆分法
    逻辑和遍历法同源,更贴合部分开发者调用内置函数的编码习惯:
    1. 遍历整个字符串,把所有非数字字符统一替换成不会和数字冲突的分隔符,比如英文逗号、空格
    2. 全部替换完成后,用选好的分隔符把整个字符串拆成片段
    3. 过滤掉拆分结果里的空字符串,剩下的片段转成整数,就是需要提取的数字列表
  • ASCII码区间判断法
    本质是遍历法的变体,只是判断数字的逻辑换成了直接校验ASCII码值:数字0-9对应的ASCII码固定在48到57的连续区间内,遍历每个字符时先取它对应的ASCII码,落在这个区间里的就是数字,后续缓存、收尾逻辑和逐字符遍历法完全一致,适合没有内置字符类型判断函数的极简编程环境。

*注意:所有方案都要提前覆盖边界场景:字符串首尾为数字、字符串内无任何数字、多段数字紧邻的情况,避免漏提取或者返回无效空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:42:09