Lua шаблон, соответствующий числовому формату и не записывающий ранее - PullRequest
0 голосов
/ 21 января 2020

Я хочу захватить разрешения и обновить sh скорость вывода с 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 - массив, содержащий каждую строку вывода команды. Моя текущая попытка получить индивидуальные ставки sh выглядит следующим образом: string.gmatch(xrandr[i], "%s.-(%d.-%..-%d%d)"). Это почти работает, но для каждого разрешения оно фиксирует вместе разрешение и первый показатель refre sh, а затем отдельно фиксирует любое следующее. Когда я пытаюсь напечатать преднамеренно захваченное разрешение, за которым следуют все поддерживаемые значения refre sh, оно выглядит следующим образом:

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

Где снимается разрешение, но затем снова фиксируется при первом обновлении sh ставка. Вместо этого я хотел бы получить это:

3440x1440 
59.97
99.98
49.99
2560x1440 
59.95

Итак, как я могу избежать повторного захвата разрешения при одновременном получении каждого показателя refre sh по отдельности?

1 Ответ

2 голосов
/ 21 января 2020

Ваши шаблоны очень сложны.

Разрешение: `"% d + x% d + "

%d any di git

%d+ одна или несколько цифр

x символ x

Refre sh нормы: "%d+%.%d+"

%. точка (экранированный маги c символ . с %, иначе . означает любой символ)

В одном go:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...