lua - Lua 模式匹配数字格式并且不捕获较早的数字
问题描述
我想从xrandr -q
. 具体来说,这些数字的格式为xx.xx
or 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)")
where 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
那么如何避免重新捕获分辨率,同时还单独获得每个刷新率呢?
解决方案
你的模式太复杂了。
分辨率:`"%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
所以匹配任何也可能包含 a或 an"[0-9x.]+"
的数字序列.
x
推荐阅读
- java - 在 servlet 中解析 Json
- c# - ASP.NET Core 服务不会重定向 http:localhost:
到 https 架构 - reactjs - REACT:将项目推送到状态内的数组
- image - TWIG 不应用图像样式,但计算它
- mongodb - 使用 MongoDB 进行模糊搜索,为什么 /1.0/ 匹配 100.0?
- azure - 是否可以将“V2”存储帐户降级为“V1”?
- linux - 多线程应用程序中的 BPF 过滤器
- c++ - 变量在常量表达式中可用的条件
- javascript - PayPal 智能支付按钮中的自定义文件
- java - 运行 sbt 并获取“未解决的依赖项:收到致命警报:access_denied”