Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Collapse
Brand Logo

CELua[RU]

  1. Главная
  2. Программирование
  3. Плагин-строй
  4. CE Tool Lua Regular expressions 2

CE Tool Lua Regular expressions 2

Запланировано Прикреплена Закрыта Перенесена Плагин-строй
ce plugin
2 Сообщения 1 Posters 52 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • MasterGHM Не в сети
    MasterGHM Не в сети
    MasterGH Администраторы
    написал в отредактировано MasterGH
    #1

    CT таблица для составления регулярных выражений 4-х функций

    string.match (s, pattern [, init])
    string.gmatch (s, pattern)
    string.gsub (s, pattern, repl [, n])
    string.find (s, pattern [, init [, plain]])
    

    Функция string.gsub может принимать в аргумент функции "repl" таблицу (тогда будет замена по ключам значений из таблицы ) или в аргумент "repl" может попадать некоторая другая функция с аргументом найденного слова (тогда будет вызов этой другой функции при каждом захвате символа или слова). Более подробное в документации Lua 5.3

    Еще несколько ссылок с практическим руководством

    lua-users wiki: Sample Code
    lua-users wiki: Optimisation Tips
    lua-users wiki: Object Oriented Programming
    lua-users wiki: Tutorial Directory

    9c7cb7f1-e10d-4d07-84c5-6d2ee905e441-image.png

    63a3f6ae-ce5e-4d49-b556-534380157b0f-image.png
    2df0435b-b355-48e3-934a-00e4daa0dcca-image.png

    8f2a6a5e-2b4c-4d9a-b13d-17a80956faa8-image.png

    f23565ca-e4bb-4896-a680-54f00a0a2975-image.png

    1 ответ Последний ответ
    0
  • MasterGHM Не в сети
    MasterGHM Не в сети
    MasterGH Администраторы
    написал в отредактировано
    #2

    Lua поиск элемента до и после строки

    Была задача получить два списка из документа, в котором было с пару десятков тысяч строк. На практике выяснилось, что искать текст после ключевого слова легче чем искать текст до ключевого слова. Об этом и будет дальше

    В утилите "Lua Regular Expressions (v. 1.0)"
    image.png
    Текст во вкладке "gmatch"

    Game1
    gameCompany
    DAU
    53.21k
    -20%
    Game2
    gameCompany
    DAU
    20.35k
    -20%

    Поиск элемента после строки: "DAU "DAU%c%c(.-)%c%c"

    53.21k;20.35k;

    Поиск элемента до строки: "%c%c(.-)gameCompany%c%c"
    (паттерн со двигом скобок для поиска предыдущей фразы)
    не прокатит для вывода списка игр над фразой gameCompany

    ;53.21k
    -20%

    Game2
    ;

    Очевидно, можно сделать поиск по похожим фрагментам, которые идут последовательно сверху вниз.

    Cначала добавим первую пустую строку и видим повторяющиеся фрагменты

    "%c%cGame1%c%cgameCompany%c%c"

    пишем шаблон ".*%c%c(.-)%c%cgameCompany%c%c" и опять мимо

    Game1;53.21k
    -20%

    Game2;

    Потому что текст над Game2 пошел выше Game2. Тогда делаем захват, только первой фразы и дальше не идем "%c%c(%w-)%c%cgameCompany%c%c"

    Game1;Game2;
    И тогда все ок.

    Но это еще не все. Осталась первая пустая строка, которую добавили, если её удалить, тогда "%c%c(%w-)%c%cgameCompany%c%c"

    Game2;
    Не видит Game1.

    Значит мы можем убрать %c%c, и будет "(%w-)%c%cgameCompany"

    Game1;Game2;

    Дальше название игры может быть таким "My Game: my Game". Здесь и пробел и двоеточие. В таком случае текст уже будет

    My Game1: my Game

    gameCompany

    DAU

    53.21k

    -20%

    My Game2: my Game

    gameCompany

    DAU

    20.35k

    -20%

    Пробуем "(%w-)%c%cgameCompany"

    Game;Game;
    Что не верно, т.к. захват одним (%w-)

    Мы должны в скобках развернуть фразу имени игры. В ней могут быть пробелы, числа, текст и двоеточие

    '([%w%s]-)%c%cgameCompany'

    my Game; my Game;

    Затем ([:%w%s]-)%c%cgameCompany

    My Game1: my Game;

    My Game2: my Game;

    Затем %c?%c?([:%w%s]-)%c%cgameCompany

    My Game1: my Game;
    My Game2: my Game;

    Вот и все. Если попариться один раз, то тексты уже парсить будет гораздо быстрее.

    Так я вывел столбы DAU и названий игр в таблицу, что было в районе 500 строк из пару десятков тысяч строк

    p.s. Текст в консоли Lua отличается %c%c, а %с

    p.s.p.s. Можно раcсплитить текст по "/n/r" или "/n" в таблицу строк и по индексам данных находить предыдущую или последующую фразу. Но мне проще две строки ввести "%c?%c?([:%w%s]-)%c%cgameCompany" и "DAU%c%c(.-)%c%c"

    1 ответ Последний ответ
    0

Powered by NodeBB | Contributors
СeLua[RU] 2024©
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы