我有一个监控 CPU 和 GPU 温度的外部应用程序...
我在 alien extension 中使用 Lua获取这些值(通过 GetWindowText )并对这些值进行一些模式匹配,有效地从字符串中提取温度数字,默认情况下显示为 CPU 67.875 °C
。 ..
但也许我对模式在 LUA 中的工作方式有错误的想法(因为它们看起来不像正则表达式)?
我使用的模式是 [%d]+[.%d+]*
,它应该匹配 0 到 100.0 之间的任何数字,对吗?
然而奇怪的是,我是getting incredibly strange output当数值达到 56.5 度左右时(查看链接)。
为什么会这样?
以及如何以 XYY.ZZZ
格式提取 0 到 100 之间的正确浮点值(作为字符串),其中 X
不是可选的, Y
是可选的,.
是可选的,除非 Z
存在?
最佳答案
您看到了累积舍入误差的影响,因为 0.16 无法用 float 精确表示。下面的代码执行得更好:
local n = 0
while n < 10000 do
local s = tostring(n/100)
local t = s:match("[%d]+[.%d+]*")
print(t)
n = n + 16
end
现在,对于您的问题,请尝试以下更简单的模式:
s="CPU 67.875 °C"
print(s:match("CPU +(.-) +"))
关于windows - lua的字符串模式匹配为什么要这样做呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16586770/