如何从Lua字符串中提取整数与浮点数?
Lua提取字符串中的整数与浮点数
要从给定字符串中提取所有整数和浮点数,你需要使用能同时匹配整数和带小数点浮点数的正则表达式,以下是具体实现:
问题分析
你之前尝试的几种正则都存在局限性:
%d+:只能匹配连续数字,会把浮点数拆分成整数部分和小数部分(比如399.4989929会被拆成399和4989929)%d*:会匹配空字符串,返回大量无效结果^%d:仅匹配字符串开头的第一个数字字符,无法提取后续所有数字
正确实现
使用正则表达式 %d+%.?%d* 可以匹配整数(如564186207)和浮点数(如399.4989929),结合string.gfind(Lua 5.1)或string.gmatch(Lua 5.2+)迭代器即可提取所有目标数字:
代码示例
S = "564186207, 399.4989929 , ABC, degds, 2425, 335.232" -- Lua 5.1 使用 string.gfind for num in string.gfind(S, "%d+%.?%d*") do io.write(num, ", ") end -- 输出:564186207, 399.4989929, 2425, 335.232, -- Lua 5.2+ 建议使用 string.gmatch(gfind 已被废弃) for num in string.gmatch(S, "%d+%.?%d*") do io.write(num, ", ") end
正则表达式说明
%d+:匹配1个或多个数字(整数的主体部分)%.?:匹配0个或1个小数点(%.是转义后的小数点,?表示该部分可选)%d*:匹配0个或多个数字(浮点数的小数部分,可选)
如果需要支持负数(如-123.45),可以将正则修改为 %-?%d+%.?%d*,其中%-?表示可选的负号。
内容的提问来源于stack exchange,提问作者우상화
相关产品推荐
相关产品推荐

