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.94    50.00

我已经通过使用string.match(xrandr [i]," ^ .-% s(% d.-x .-% s)")来获取分辨率。其中xrandr是包含每个命令输出行的数组。我的当前尝试获取各个刷新率的方法如下:string.gmatch(xrandr [i],"%s。-(% d。-%..-%d%d)")。这几乎可以工作,但是对于每个分辨率,它会一起捕获分辨率和第一个刷新率,然后单独捕获任何后续内容。当我尝试打印故意捕获的分辨率以及其支持的每个刷新率时,它看起来像这样:

3440x1440
3440x1440     59.97
99.98
49.99
2560x1440
2560x1440     59.95

其中分辨率被捕获,然后又与第一个刷新率一起被捕获。相反,我想要得到这个:

3440x1440
59.97
99.98
49.99
2560x1440
59.95

所以我如何避免重新捕获分辨率同时又单独获取每个刷新率呢?

点赞
用户2858170
用户2858170

你的模式过于复杂。

分辨率:"%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 的数字序列。

2020-01-21 07:57:13