CELua[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    CE Tool Lua Regular expressions 2

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

      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 Не в сети
        MasterGH Администраторы
        отредактировано

        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

        • 1 / 1
        • Первое сообщение
          Последнее сообщение
        Powered by NodeBB | Contributors
        СeLua[RU] 2025©