1

Я ничего не знаю о регулярных выражениях, но мне нужно иметь возможность выбирать значения из последней строки журнала, который печатается так:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,405.000 

Мне нужно регулярное выражение, которое захватит место, где 354.000 (число между 100 и 9999) в этом случае, например, так:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,**354**.000             ,405.000 

А также регулярное выражение, которое захватит место, где находится 405 в этом случае, например:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,**405**.000 

Я использую программу CrystalControl2 для отображения информации с моего компьютера на внешнем ЖК-экране. Инструмент, встроенный в программу для получения информации из текстовых файлов или HTML-страниц, требует регулярного выражения для извлечения результатов из нефильтрованной исходной информации.

Чтобы быть более точным, файл журнала добавляет строку к текстовому файлу с моими часами ядра GPU и часами памяти в местах, которые я выделил один раз в секунду. Я хочу получить эти обновленные значения и отобразить их в полях на ЖК-экране через CrystalControl2. Я пытаюсь получить эти значения, не устанавливая другое программное обеспечение, которое более легко доступно из CrystalControl2, чтобы избежать как конфликтов программного обеспечения, так и запуска нескольких различных программ, чтобы ссылаться на всю информацию, которую я хочу отобразить на моем ЖК-дисплее

Как я уже сказал, эти числа могут быть 3 или 4-значными числами ... это вообще возможно?

2 ответа2

0

Очевидно, что существует серьезная нехватка документации для формата регулярных выражений CrystalControl2. Но из того, что я собрал, просмотрев очень мало примеров, которые я смог найти, они используют группировку для извлечения необходимого текста. У некоторых есть больше групп, чем у других, и мне не было понятно, почему. Но здесь есть пробел в регулярном выражении, чтобы соответствовать числам в журнале MSI Afterburner.

\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$

Как?

Итак, давайте разберем это на части. Мы будем работать в обратном направлении с конца, так как у нас есть привязка конца строки ($)

  1. $ - привязка к концу строки.

    Хотя из примеров мне показалось, что это привязывает к концу файла.

  2. [^,]* - соответствует нулю или большему количеству символов, кроме запятых

  3. \. - сопоставить точку (десятичную точку).

    \ Необходим потому что . является особенным в регулярных выражениях и означает совпадать с чем угодно. \ Делает это просто точкой.

  4. (\d+) - сопоставить одну или несколько цифр и сгруппировать их с помощью () .

    Группа позволяет извлечь результат матча.

  5. ,[^0-9,]* - соответствует запятой, за которой следует ноль или более нецифров или запятых

  6. \.[^,]* - найти точку, за которой следует ноль или более не запятых

  7. \D+(\d+) - найти одну или несколько не цифр, за которыми следуют одна или несколько цифр, и сгруппировать цифры

Тестирование:

Поскольку у меня нет доступа к ЖК-дисплею или его программному обеспечению, я использовал Perl для проверки этого:

cat file1 | perl -lpe 's/\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$/:::: \1 xxx \2/'

Результаты теста:

80, 21-06-2017 20:42:27, 16.000:::: 1392 xxx 4714
80, 21-06-2017 20:42:28, 6.000:::: 860 xxx 810
80, 21-06-2017 20:42:29, 7.000:::: 860 xxx 810
80, 21-06-2017 20:42:30, 7.000:::: 354 xxx 405

Таким образом, регулярное выражение нашло последние два числа в строке, которые можно увидеть между ::: и xxx

Обновление результатов из комментариев

Результаты

-1

Ну, что ты пробовал,

Я бы посоветовал взглянуть на NimbleText , довольно простой в использовании

Я не до конца понимаю вашу проблему, но я создал здесь фрагмент, чтобы помочь в дальнейшем.

http://nimbletext.com/Live/-176683481/

<% ($3 > 100 && $3 < 9999) ? $3 : '' %> | <% ($4 > 100 && $4 < 9999) ? $4 : '' %>

надеюсь, это поможет

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .