Lua模式匹配数字格式,不捕获早期数字

Lua模式匹配数字格式,不捕获早期数字,lua,Lua,我想从xrandr-q捕获分辨率和刷新率输出。具体而言,这些数字的格式为xx.xx或xxx.xx,其中小数点后始终有2个数字,但有时小数点前也有2或3个数字。我想单独捕获每个值,以便能够存储它们以供以后使用 4行典型的命令输出如下所示: 3440x1440 59.97 + 99.98* 49.99 2560x1440 59.95 2560x1080 60.00 59.94 1920x1080 60.00 59.

我想从
xrandr-q
捕获分辨率和刷新率输出。具体而言,这些数字的格式为
xx.xx
xxx.xx
,其中小数点后始终有2个数字,但有时小数点前也有2或3个数字。我想单独捕获每个值,以便能够存储它们以供以后使用

4行典型的命令输出如下所示:

   3440x1440     59.97 +  99.98*   49.99  
   2560x1440     59.95  
   2560x1080     60.00    59.94  
   1920x1080     60.00    59.94    50.00 
3440x1440 
3440x1440     59.97
99.98
49.99
2560x1440 
2560x1440     59.95
我已经能够使用
string.match(xrandr[I],“^.-%s(%d.-x.-%s)”)获得分辨率。
其中xrandr是包含每行命令输出的数组。我当前尝试单独获取刷新率的结果如下:
string.gmatch(xrandr[i],%s.-(%d.-%..-%d%d)”
。这几乎是可行的,但对于每个分辨率,它都会同时捕获分辨率和第一次刷新率,然后分别捕获以下内容。当我尝试打印有意捕获的分辨率,然后再打印其支持的每个刷新率时,结果如下所示:

   3440x1440     59.97 +  99.98*   49.99  
   2560x1440     59.95  
   2560x1080     60.00    59.94  
   1920x1080     60.00    59.94    50.00 
3440x1440 
3440x1440     59.97
99.98
49.99
2560x1440 
2560x1440     59.95
捕获分辨率,然后以第一次刷新率再次捕获分辨率。相反,我想得到这个:

3440x1440 
59.97
99.98
49.99
2560x1440 
59.95

那么,我如何避免重新捕获分辨率,同时也以虚拟方式获取每个刷新率呢?

您的模式非常复杂

分辨率:`%d+x%d+“

%d
任意数字

%d+
一个或多个数字

x
字符x

刷新率:
%d+%。%d+”

%。
一个点(转义的魔法字符
%
,否则
表示任何字符)

一次性:

local a = "1234x5678 12.34 56.78"

for match in a:gmatch("[0-9x.]+") do print(match) end
[0-9x.]
是一类字符。它匹配任何出现的数字
0
9
x


因此,
“[0-9x.]+”
匹配任何可能包含
x的数字序列。您的模式非常复杂

分辨率:`%d+x%d+“

%d
任意数字

%d+
一个或多个数字

x
字符x

刷新率:
%d+%。%d+”

%。
一个点(转义的魔法字符
%
,否则
表示任何字符)

一次性:

local a = "1234x5678 12.34 56.78"

for match in a:gmatch("[0-9x.]+") do print(match) end
[0-9x.]
是一类字符。它匹配任何出现的数字
0
9
x


因此,
“[0-9x.]+”
匹配任何可能也包含
x

的数字序列,非常感谢。我想15分钟的文档阅读并没有太大帮助,但你能解释一下这些模式到底在做什么吗?@Raspberry Jam我建议你阅读一下这个页面,效果非常好,谢谢。我想15分钟的文档阅读并没有太大帮助,但你能解释一下这些模式到底在做什么吗?@Raspberry Jam我建议你阅读一下这个页面,