[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: Andrey_A, simup, ХарВик, chip642  
Форум » • Программы • Утилиты • » Утилиты » RegExp и вопросы по регулярным выражениям
RegExp и вопросы по регулярным выражениям
Andrey_AДата: Четверг, 28.11.2013, 22:49 | Сообщение № 1
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6426
Награды: 98
Репутация: 87
Аверин Андрей
RegExp




Дата выпуска: 2008
Версия: 1.02
Автор: AZJIO

RegExp - Утилита для теста регулярных выражений. Имеет несколько библиотек с готовыми регулярными выражениями, для решения некоторых задач парсинга. Утилита представляет собой только оболочку, синтаксический анализ (парсинг) выполняет встроенный в AutoIt3 движок PCRE. Ограничение добавления патернов в библиотеку 99. Для большего количества делаем очередной файл-библиотеку.



Скачать бесплатно Доступно только для пользователей

Дата выпуска: 29.07.2018
Версия: 2.8
Автор модификации: Averin Andrey

Скачать бесплатно модифицированную версию Доступно только для пользователей



В этой теме возможны обсуждения вопросов, связанных с регулярными выражениями


Ссылки на различные ресурсы, документы

Доступно только для пользователей


В разных программах регулярные выражения могут отличаться...

.


 
Andrey_AДата: Понедельник, 12.06.2017, 10:08 | Сообщение № 16
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6426
Награды: 98
Репутация: 87
Аверин Андрей
Рекомендую при использовании подборке регулярных выражений обращать внимание на скорость выполнения




Я знал что есть медленные регулярные выражения, но не всегда акцентируешься на этом - главное работает и ладно...

Недавно в очередной раз убедился что на ВРЕМЯ выполнения выражения стоит обращать пристальное внимание, особенно при обработке большого текста
--------------
Вот пример:
1. Есть текст 20.000 строк
2. Есть 1.500 фраз
3. Цель создать 1.500 файлов со строками в которых есть заданные фразы...

Все достаточно просто - пробежаться в цикле 1500 раз и регуляркой повыдёргивать.

Сделал :
Код
[^\r\n]*фраза[^\r\n]*

все отлично - работает - пошёл в магазин, пришёл а цикл все работает - в итоге все это сделалось за 40 минут

Встал вопрос почему так медленно... В итоге проб и ошибок, подобрал такое:
Код
(?m)^.*фраза.*$


Она туже самую задачу сделала за 5 минут - как говорится "Почувствуйте разницу"

.


 
Andrey_AДата: Среда, 14.06.2017, 22:19 | Сообщение № 17
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6426
Награды: 98
Репутация: 87
Аверин Андрей
Регулярные выражения могут зацикливать скрипт/программу


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

Вот несколько примеров...
В русской справке Autoit есть:
Код
Найти (\r\n|\r|\n){2,} заменить на \1 - удаляет пустые строки


Я тоже подобным пользовался, есть ещё и такое:
Код
(\R)+ заменить на \1

НО недавно попался текст, в котором пустых строк подряд было более 5000 и я не мог понять почему срипт ни с того ни с сего "падает"
Оказалось регулярка...
Подобрал такую:
Код
(\R)(\R+) заменить на \1

----
Подобная ситуация с удалением лишних пробелов, такая конструкция работала на небольшом к-ве пробелов
Код
(\h)+ заменить на \1

Но как только их появилось несколько тысяч подряд, то все рушилось...
Такая работает на большом количестве
Код
(\h)(\h+) заменить на \1

------------------
Вот ещё - долго пользовался для получения секции INI файла
Код
StringRegExp($sText,'(?mi)^\Q['&$sSection&']\E'&'[\r\n]+((?:[^[\r\n].*(?:[\r\n]+|$))*)',1)

а потом выяснилось, что она зависает, если ключей в секции более 3000 ...
Сейчас подобрал такую...
Код
StringRegExp($sText&@CRLF,'(?si)(?:\r\n|\r|\n|^)\Q['&$sSection&']\E'&'[\r\n]+(.*?[\r\n]+)(?:\[|$)',1)


-----------
ИТОГО: Не ленитесь тестировать на большом объёме данных, обращая внимания на скорость выполнения

.


 
asmadeusДата: Понедельник, 12.02.2018, 20:21 | Сообщение № 18
Генерал-полковник

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1059
Награды: 26
Репутация: 29
Не могу сообразить простую вроде бы регулярку.
Задача - получать номер версии с первой строки текстового файла.
Примеры записей:
Код
Converber 2.3.1

Программа, позволяющая конвертировать 2078 различных единиц измерения в 53 категориях. Преобразовывать можно длину, силу потока, температуру, денежные единицы (ежедневно обновляются) и т.д. Для удобства пользователя присутствует быстрый доступ к выбранным категориям, возможность добавления в закладки наиболее используемых преобразований, встроенный калькулятор, редактор формул и многое другое.

Еще:
Код
VeraCrypt 1.21 Rev 2

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

У меня получилось что то такое - учитывваются 4 группы цифр, из которых обязательны две. Учтено, что вместо цифр на третьей позиции может быть rev, build, final или beta... Но надо сделать выбор только с первой строки, так как если есть цифры в остальном тексте - идет не то что требуется:
Код
$test = stringRegExpReplace ($test, "([^\d]+)(\d+\.\d+(?:\sRev|\sBuild|\sBeta|\sFinal|\.\d+)?(?:\.\d+|\s\d+)?)*","\2")
 
Andrey_AДата: Понедельник, 12.02.2018, 21:00 | Сообщение № 19
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6426
Награды: 98
Репутация: 87
Аверин Андрей
asmadeus, для получения начало строки есть спец. символ \A

Получить 1-ю строку:

Код
\A([^\r\n]+)




Для получения групп цифр первой строки, один из примеров

Код
\A(?:[^\r\n\d]+)([\d\.]+)(?:[^\r\n\d]*)(\d*)




.


 
asmadeusДата: Понедельник, 12.02.2018, 21:21 | Сообщение № 20
Генерал-полковник

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1059
Награды: 26
Репутация: 29
Andrey_A, а я думал, что примерно так:
Код
(?m)^Text$

Пытался - и ничего. Сейчас попробую твой вариант/
Жуть. В RegExp работает. Засовываю в скрипт - полная хрень. Ну и ладно, пойдем другим путем.
Добавлено:
Итого, как не странно, подошел такой вариант. Вроде работает на всех встречающихся мне вариантах текста:
Код
$test = StringRegExpReplace($test,'\A(?:[^\r\n\d]+)([^\r\n]+)(?s)(.+)','\1')

Осталось переделать для вставки в tcimg (в одном месте надо с replace, как выше, а в другом просто поиск и замена через утилиту. Никак же не указать, что возьми первую скобку и замени на что то.)
 
Форум » • Программы • Утилиты • » Утилиты » RegExp и вопросы по регулярным выражениям
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Сообщите о находке всему миру:
Рейтинг@Mail.ru Тиц и pr сайта Яндекс.Метрика

Интеллектуальные права и отказ от ответственности


Перейти на сайт Недвижимость сточи