用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)
答案 0 :(得分:1)
如果您坚持像常规正则表达式中所示那样对数字值进行宽松定义,则我们会遇到麻烦,因为lua模式不支持交替操作|
。
建议的模式([+-]?%d*%.?%d+)
实际上在大多数情况下都有效,但是,如果您还想允许像42.
这样的情况(如PCRE那样),它将失败。
我们可以尝试使用括号和一个可选的多余点,在这种情况下,它们会掉落:([+-]?%d*%.?%d+)%.?
这很接近,但是如果没有数字后跟最后一个点,则将其删除,因此返回假阳性,例如{{ 1}}作为.12.
。 *
* (不过,实际上它与RE \[+-\]?(\d+(\.\d+)?|\.\d+)
相同,但没有指数部分。.
如果我希望使用更完整的RE,例如this:.12
)
演示代码:
^[+-]?((\d+(\.\d*)?)|(\.\d+))$
我认为第一个建议的选项是可以接受的。如果即使第二个版本仍然无法使用,我建议您尝试使用lrexlib(一个多样式正则表达式库)或LPeg(一个用于Lua的强大文本解析库)。