Lua regex查找字符串中的数字

时间:2019-06-20 20:19:19

标签: lua lua-patterns

用Lua在字符串中找到数字的正确正则表达式是什么?由于在lua正则表达式中使用括号的方式,似乎很难正确匹配小数点和其后的数字。

下面的测试代码中的变通办法可以满足我的脚本的即时需求,但是也可以接受+1.23.45之类的模式。

--[+-]?(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?  std regex for a numeral

s = "+1.23"
re = "([+-]?%d+[%.%d+]*)"
n = s:match (re)
print (n)

1 个答案:

答案 0 :(得分:1)

如果您坚持像常规正则表达式中所示那样对数字值进行宽松定义,则我们会遇到麻烦,因为lua模式不支持交替操作|

建议的模式([+-]?%d*%.?%d+)实际上在大多数情况下都有效,但是,如果您还想允许像42.这样的情况(如PCRE那样),它将失败。

我们可以尝试使用括号和一个可选的多余点,在这种情况下,它们会掉落:([+-]?%d*%.?%d+)%.?这很接近,但是如果没有数字后跟最后一个点,则将其删除,因此返回假阳性,例如{{ 1}}作为.12.。 *

* (不过,实际上它与RE \[+-\]?(\d+(\.\d+)?|\.\d+)相同,但没有指数部分。.
如果我希望使用更完整的RE,例如this.12

演示代码:

^[+-]?((\d+(\.\d*)?)|(\.\d+))$

我认为第一个建议的选项是可以接受的。如果即使第二个版本仍然无法使用,我建议您尝试使用lrexlib(一个多样式正则表达式库)或LPeg(一个用于Lua的强大文本解析库)。