用lua匹配浮点数或者整数

我不得踢噶 2014-04-01 12:03:20
写lua脚本中遇到一个问题:
一个字符串里面有浮点数和整数,怎样写正则表达式取出浮点数和整数?

比如:
str = "每 2.01秒造成 4 点伤害"
怎样用lua取出2.01与4
谢谢!
(P.s:没有lua版块,只能发这里了。)
...全文
1074 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
羽飞 2014-04-02
  • 打赏
  • 举报
回复
引用 3 楼 tyaathome 的回复:
[quote=引用 1 楼 hnwyllmm 的回复:] str = "每 2.01秒造成 4 点伤害" 这个字符串的格式是固定的吗? 我的正则表达式写的不好,写了一个简单的,做示意: str = "每 2.01秒造成 4 点伤害"; print(string.len(str)) local i, j = string.find(str, "[0-9]*%.[0-9]*"); -- [0-9]*%.[0-9]* 这个应该是浮点数的正则表达式,不过写的肯定不对 print("i = " .. tostring(i)); print("j = " .. tostring(j)); print(string.sub(str, i, j) ) i, j = string.find(str, "[0-9]+", j + 1); print(string.sub(str, i, j)); LUA中string.find函数: string.find(s, pattern, pos) s 源字符串, pattern: 查找的模式字符串,可以是正则表达式 pos:查找的开始位置,LUA中索引从1开始 楼主再从网上搜索下string.find的详细用法
谢谢,我还有一个问题: 我不知道这个字符串中具体有什么,但是我想取出字符串中的浮点型或者整形字符串。 取浮点型的可以沿用你的那段代码,那取整形字符串该怎么办呢? 如果用 i, j = string.find(str, "[0-9]+") print(string.sub(str, i, j)) 输出来的则是浮点型字符串的整形部位的值。 求解。谢谢![/quote] 直接用[0-9]+,浮点数的整数部分是满足这个正则表达式的,楼主只能先取出浮点数,再取整数,要不然取到整数后判断这个整数后面一位是不是'.' 比如: str = "每 2.01秒造成 4 点伤害"; i, j = string.find(str, "[0-9]+"); print(string.sub(str, i, j)); if string.byte(".") == string.byte(str, j + 1) then print("这是一个浮点数"); else print("这是一个整数"); end
我不得踢噶 2014-04-01
  • 打赏
  • 举报
回复
引用 1 楼 hnwyllmm 的回复:
str = "每 2.01秒造成 4 点伤害" 这个字符串的格式是固定的吗? 我的正则表达式写的不好,写了一个简单的,做示意: str = "每 2.01秒造成 4 点伤害"; print(string.len(str)) local i, j = string.find(str, "[0-9]*%.[0-9]*"); -- [0-9]*%.[0-9]* 这个应该是浮点数的正则表达式,不过写的肯定不对 print("i = " .. tostring(i)); print("j = " .. tostring(j)); print(string.sub(str, i, j) ) i, j = string.find(str, "[0-9]+", j + 1); print(string.sub(str, i, j)); LUA中string.find函数: string.find(s, pattern, pos) s 源字符串, pattern: 查找的模式字符串,可以是正则表达式 pos:查找的开始位置,LUA中索引从1开始 楼主再从网上搜索下string.find的详细用法
谢谢,我还有一个问题: 我不知道这个字符串中具体有什么,但是我想取出字符串中的浮点型或者整形字符串。 取浮点型的可以沿用你的那段代码,那取整形字符串该怎么办呢? 如果用 i, j = string.find(str, "[0-9]+") print(string.sub(str, i, j)) 输出来的则是浮点型字符串的整形部位的值。 求解。谢谢!
羽飞 2014-04-01
  • 打赏
  • 举报
回复
local i, j = string.find(str, "[0-9]+%.*[0-9]*"); 更新下
羽飞 2014-04-01
  • 打赏
  • 举报
回复
str = "每 2.01秒造成 4 点伤害" 这个字符串的格式是固定的吗? 我的正则表达式写的不好,写了一个简单的,做示意: str = "每 2.01秒造成 4 点伤害"; print(string.len(str)) local i, j = string.find(str, "[0-9]*%.[0-9]*"); -- [0-9]*%.[0-9]* 这个应该是浮点数的正则表达式,不过写的肯定不对 print("i = " .. tostring(i)); print("j = " .. tostring(j)); print(string.sub(str, i, j) ) i, j = string.find(str, "[0-9]+", j + 1); print(string.sub(str, i, j)); LUA中string.find函数: string.find(s, pattern, pos) s 源字符串, pattern: 查找的模式字符串,可以是正则表达式 pos:查找的开始位置,LUA中索引从1开始 楼主再从网上搜索下string.find的详细用法

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧